@[Grace25](/user/359883)
我把我的代码发给你吧
```c
#include <bits/stdc++.h>
using namespace std;
const int maxn = 3.2 * 1e4 + 10;
int n,m,V,p,q,v[100],w[100],fw[100][5],fv[100][5],dp[maxn];
int main()
{
scanf("%d%d",&n,&m);
for(int i = 1;i <= m;i++)
{
scanf("%d%d%d",&V,&p,&q);
if(q == 0)
{
v[i] = p * V;
w[i] = V;
}
else
{
fv[q][0]++;
fv[q][fv[q][0]] = V * p;
fw[q][fv[q][0]] = V;
}
}
for(int i = 1;i <= m;i++)
{
for(int j = n;j >= w[i];j--)
{
dp[j] = max(dp[j],dp[j - w[i]] + v[i]);
if(j >= w[i] + fw[i][1]) dp[j] = max(dp[j],dp[j - w[i] - fw[i][1]] + v[i] + fv[i][1]);
if(j >= w[i] + fw[i][2]) dp[j] = max(dp[j],dp[j - w[i] - fw[i][2]] + v[i] + fv[i][2]);
if(j >= w[i] + fw[i][1] + fw[i][2]) dp[j] = max(dp[j],dp[j - w[i] - fw[i][1] - fw[i][2]] + v[i] + fv[i][1] + fv[i][2]);
}
}
printf("%d",dp[n]);
return 0;
}
```
by 旭日临窗 @ 2020-10-31 18:36:51