AcWing 5. 多重背包问题 II
原题链接
中等
作者:
术
,
2021-03-02 20:07:11
,
所有人可见
,
阅读 204
#include <iostream>
using namespace std;
int n,m;
const int N=2005*15;
int v[N],w[N];
int f[2005];
int cnt;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int a,b,c;
cin>>a>>b>>c;
int k=1;
//转为二进制
while(k<=c){//注意条件
cnt++;
v[cnt]=k*a;
w[cnt]=k*b;
c-=k;
k*=2;//
}
if(c>0){
cnt++;
v[cnt]=a*c;
w[cnt]=b*c;
}
}
n=cnt;
for(int i=1;i<=n;i++){
for(int j=m;j>=v[i];j--){
f[j]=max(f[j],f[j-v[i]]+w[i]);
}
}
cout<<f[m];
//cout << "Hello world!" << endl;
return 0;
}