AcWing 7. 混合背包问题
原题链接
中等
作者:
橙柚哥哥
,
2024-10-25 18:28:50
,
所有人可见
,
阅读 2
求赞!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,dp[1010];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(ll i=1,v,w,s; i<=n; ++i) {
cin>>v>>w>>s;
if(s) {
if(s==-1) s=1;
for(ll t=1; t<=s; s-=t,t*=2)
for(ll j=m; j>=t*v; --j)
dp[j]=max(dp[j],dp[j-t*v]+t*w);
if(s)
for(ll j=m; j>=s*v; --j)
dp[j]=max(dp[j],dp[j-s*v]+s*w);
} else
for(ll j=v; j<=m; ++j)
dp[j]=max(dp[j],dp[j-v]+w);
}
cout<<dp[m];
return 0;
}