AcWing 4. 多重背包问题 I
原题链接
简单
作者:
杨某
,
2022-02-13 13:48:38
,
所有人可见
,
阅读 191
朴素解法(易TLE)适用于本题
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int n,m;
int f[N][N],v[N],w[N],s[N];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i]>>s[i];
for(int i=1;i<=n;i++)
for(int j=0;j<=m;j++)
for(int k=0;k<=s[i]&&k*v[i]<=j;k++){
f[i][j]=max(f[i][j],f[i-1][j-v[i]*k]+k*w[i]);
}
//划分区间时,可分为第i个的数量为0~k; k=(0~s[i])
//所以f[i]][j]=max(f[i-1][j],f[i-1][j-k*v[i]]+k*w[i]); max里面第一项为k=0时,后面则是k=1~s[i];
cout<<f[n][m]<<endl;
return 0;
}