题目链接
emm把每组物品放在一起去做01背包,注意枚举容量要在枚举物品之前。
vector<pair<ll,ll> >s[3000];
ll dp[3333];
signed main()
{
ll n,m;
read(m);
read(n);
ll ma=0;
for(int i=1; i<=n; i++)
{
ll x,y,z;
read(x);
read(y);
read(z);
s[z].push_back(mp(x,y));
ma=max(ma,z);
}
for(int i=1; i<=ma; i++)
{
for(int j=m; j>=0; j--)
{
for(int k=0; k<s[i].size(); k++)
{
if(j>=s[i][k].fi)
{
dp[j]=max(dp[j],dp[j-s[i][k].fi]+s[i][k].se);
}
}
}
}
printf("%lld",dp[m]);
}