AcWing 5. 多重背包问题 II
原题链接
中等
作者:
我已经不想再做刺客了
,
2021-03-21 13:22:09
,
所有人可见
,
阅读 307
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2010;
int n,m,dp[N];
struct GOOD{
int v;
int w;
};
vector <GOOD> goods;
int main(){
cin>>n>>m;
while(n--){
int v,w,s;
cin>>v>>w>>s;
for(int k=1;k<=s;k*=2){
s-=k;
goods.push_back({v*k,w*k});
}
if(s>0)goods.push_back({v*s,w*s});
}
for(auto good:goods){
for(int j=m;j>=good.v;j--){
dp[j]=max(dp[j],dp[j-good.v]+good.w);
}
}
cout<<dp[m];
}