明显的多重背包板子题,我就想试试直接枚举每种物品选几个,既没单调队列也没二进制压缩试试能过几个点没想到开氧直接A了。。
https://www.luogu.com.cn/record/66182261
#include<bits/stdc++.h>
using namespace std;
int dp[100005];
int n,m;
int v[100005],w[100005],s[100005];
int main()
{
cin>>n>>m;
for(int i = 1;i<=n;++i)
cin>>w[i]>>v[i]>>s[i];
for(int i = 1;i<=n;++i)
for(int j = m;j>=0;--j)
for(int k = 1;k<=s[i]&&k*v[i]<=j;++k)
dp[j] = max(dp[j],dp[j-k*v[i]]+k*w[i]);
cout<<dp[m]<<endl;
return 0;
}