0-1背包变形,把所有种类拆开。
记得拆了之后push进v和w的下标是从0开始的。
#include <iostream>
#include <vector>
using namespace std;
const int N = 100010;
vector<int> v,w;
int f[N];
int main(){
int n,m;
cin>>n>>m;
//f[0] = 0;
for (int i = 1;i<=n;i++){
int a,b,c;
cin>>a>>b>>c;
for (int j = 1;j<=c;j++){
v.push_back(a);
w.push_back(b);
}
}
int h = v.size();
for (int i = 0; i<h;i++){
for (int j = m;j>=v[i];j--){
f[j] = max(f[j],f[j-v[i]]+w[i]);
}
}
cout<<f[m]<<endl;
return 0;
}