将多重背包展开为01背包
#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
using namespace std;
typedef long long ll;
const int MAXN = 1e6 + 10;
int volume[MAXN] = {0}, value[MAXN] = {0}, dp[MAXN] = {0};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int len, sumvolume, tf = 1, tmp;
int tvol, tval, tpre;
cin>>len>>sumvolume;
while(len--)
{
cin>>tvol>>tval>>tpre;
for(int i = 1; i <= tpre; i++)
{
volume[tf] = tvol;
value[tf++] = tval;
}
}
for(int i = 1; i < tf; i++)
{
for(int j = sumvolume; j >= volume[i]; j--)
{
tmp = dp[j - volume[i]] + value[i];
if(tmp > dp[j])
dp[j] = tmp;
//dp[j] = max(dp[j], dp[j - volume[i]] + value[i]);
}
}
cout<<dp[sumvolume]<<endl;
return 0;
}