求助
查看原帖
求助
1164775
Jadonyzx楼主2024/4/21 16:54

code:

#include<bits/stdc++.h>
#define maxn 10010
#define maxm 7
#define maxc 1010
#define int long long
using namespace std;
int n,m,C,V,W,D,cnt;
int v[maxn*10],w[maxn*10];
int a[maxm],b[maxm],c[maxm],dp[2][maxc];
signed main(){
	cin>>n>>m>>C;
	for(int i=1;i<=n;++i){
		cin>>V>>W>>D;
		int resw=W,resv=V;
		for(int res=1;res<=D;res*=2,resw*=2,resv*=2){
			D-=res;
			v[++cnt]=resv;
			w[cnt]=resw;
		}
		if(D>0){
			v[++cnt]=V*D;
			w[cnt]=W*D;
		}
	}
	for(int i=1;i<=m;++i){cin>>a[i]>>b[i]>>c[i];}
	for(int i=1;i<=cnt;++i){
		for(int j=C;j>=0;--j){
			if(j>=v[i])dp[i%2][j]=max(dp[i%2^1][j-v[i]]+w[i],dp[i%2^1][j]);
			else dp[i%2][j]=dp[i%2^1][j];
		}
	}
	for(int i=cnt+1;i<=cnt+m;++i){
		for(int j=0;j<=C;++j){
			dp[i%2][j]=dp[i%2^1][j];
			for(int k=0;k<=j;++k){
				int f=a[i-cnt]*k*k+b[i-cnt]*k+c[i-cnt];
				dp[i%2][j]=max(dp[i%2][j],dp[i%2^1][j-k]+f);
			}
		}
	}
	cout<<dp[(cnt+m)%2][C];
	return 0;
}
2024/4/21 16:54
加载中...