同上题。
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 60;//总个数
const int maxm = 3200;//总钱数
int n,c;
int x[maxn],w[maxn],v[maxn];
int f[maxn][maxm];
inline int dfs(int k,int c)
{
if(c<=0) return 0;
for(int i=1;i<=n;i++)
if(x[i]==k)
{
for(int j=0;j<=c-v[i];j++)
f[i][j]=f[k][j]+w[i];
dfs(i,c-v[i]);
for(int j=v[i];j<=c;j++)
if(f[i][j-v[i]]>f[k][j])
f[k][j]=f[i][j-v[i]];
}
}
int main()
{
scanf("%d%d",&c,&n);
c/=10;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&v[i],&w[i],&x[i]);
w[i]=w[i]*v[i];
v[i]/=10;
}
dfs(0,c);
printf("%d\n",f[0][c]);
return 0;
}