code
#include <bits/stdc++.h>
using namespace std;
int w[1005][1005],v[1005][1005],num[1005],f[1005],a,b,c,m,n,ng;
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
w[c][++num[c]]=a;
v[c][num[c]]=b;
ng=max(ng,c);
}
for(int i=1;i<=ng;i++){
for(int k=m;k>=1;k--){
for(int j=1;j<=num[c];j++){
if(k>=w[i][j]) f[k]=max(f[k],f[k-w[i][j]]+v[i][j]);
}
}
}
cout<<f[m];
return 0;
}
测试点记录点 这里