50分求救啊
查看原帖
50分求救啊
29954
wrs123wrs楼主2020/12/4 19:31
#include <bits/stdc++.h>
using namespace std;
long long n,m,c,f1[10001],f2[10001];
int main() {
	cin>>n>>m>>c;
	for(int i=1,v,w,d; i<=n; i++) {
		cin>>v>>w>>d;
		if(d>=c/v)
			for(int j=v; j<=c; j++)
				f1[j]=max(f1[j],f1[j-v]+w);
		else {
			for(int k=1; k<=d; d-=k,k*=2)
				for(int j=c; j>=k*v; j--)f1[j]=max(f1[j],f1[j-k*v]+k*w);
			if(d)
				for(int j=c; j>=d*v; j--)f1[j]=max(f1[j],f1[j-d*v]+d*w);
		}
	}
	while(m--) {
		int ai,bi,ci;
		cin>>ai>>bi>>ci;
		for(int i=0; i<=c; i++)//分成不同的物品
			for(int j=c;j>=i;j--)//01背包
				f2[j]=max(f2[j],f2[j-i]+i*i*ai+bi*i+ci);	
	}
	long long ma=0;
	for(int i=0;i<=c;i++)ma=max(ma,f1[i]+f2[c-i]);
	cout<<ma<<endl;
	return 0;
}
2020/12/4 19:31
加载中...