30求调
查看原帖
30求调
383959
zhouhaoyu1011楼主2024/10/9 19:32
#include <bits/stdc++.h>
using namespace std;
long long T;
long long n;
struct food{
	long long a;
	long long b;
	long long c;
	long long key;
}eat[60];
long long f[100005];
bool cmp(food a,food b){
	return a.key<b.key;
}
int main(){
	cin>>T>>n;
	for(long long i=1;i<=n;i++){
		cin>>eat[i].a;
	}
	for(long long i=1;i<=n;i++){
		cin>>eat[i].b;
	}
	for(long long i=1;i<=n;i++){
		cin>>eat[i].c;
	}
	for(long long i=1;i<=n;i++){
		eat[i].key=eat[i].b*eat[i].c;
	}
	
	//f[i][j]   前i件,时间不超过j的最大美味指数
	//f[i][j]=max(f[i-1][j],f[i-1][j-eat[i].c]+eat[i].a-j*eat[i].b);
	long long ans=0;
	sort(eat+1,eat+n+1,cmp);
	for(long long i=1;i<=n;i++){
		for(long long j=T;j>=0;j--){
			if(j-eat[i].c>=0){
				f[j]=max(f[j],f[j-eat[i].c]+eat[i].a-j*eat[i].b);
			}
			ans=max(ans,f[j]);
		}
	}
	for(int i=1;i<=n;i++){
		
	}
	cout<<ans;
	return 0;
}
2024/10/9 19:32
加载中...