相较与完全背包问题,多出来的条件是,每种物品的数量是一定的。
只需要多套一个循环,选1个2个3个一直到k个,k+1种可能循环一遍就行了。
#include<bits/stdc++.h>
using namespace std;
const int N=101;
int n,m;
int f[N];
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
int v,w,s;
cin>>v>>w>>s;
for(int j=m;j>=v;j--)
for(int k=1;k<=s&&k*v<=j;k++)
f[j]=max(f[j],f[j-k*v]+k*w);
}
cout<<f[m]<<endl;
}