二进制优化多重背包50pts求助
查看原帖
二进制优化多重背包50pts求助
673342
fried_chicken楼主2024/3/12 19:37
//
#include<bits/stdc++.h>
using namespace std;
int n,m,v[110010],w[101010],f[20010];

int main(){
//
	cin>>n>>m;
	int cnt=1;
	for(int i=1;i<=n;i++){
		int a,b,s;
		cin>>a>>b>>s;
		for(int k=1;k<=s;k*=2){
			w[cnt]=a*k;
			v[cnt]=b*k;
			cnt++;
			s-=k;
		}if(s>0){
			w[cnt]=s*a;
			v[cnt]=s*b;
			cnt++;
		}
	}for(int i=1;i<=cnt;i++){
		for(int j=m;j>=v[i];j--){
			f[j]=max(f[j],f[j-v[i]]+w[i]);
		}
	}cout<<f[m];
	return 0;
}
/*

*/


2024/3/12 19:37
加载中...