#include <iostream> #include <algorithm> using namespace std; const int N(32009); int f[N]={0}; struct item{ int v;int p; int sub[3][2]; }; item data[65]; int main() { int m,n; cin>>m>>n; int v,p,q; for(int i=1;i<=n;i++) { cin>>v>>p>>q; if(q) { data[q].sub[0][0]+=1; data[q].sub[data[q].sub[0][0]][0]=v; data[q].sub[data[q].sub[0][0]][1]=p; } else { data[i].v=v; data[i].p=p; } } for(int i=1;i<=n;i++) if(data[i].p) { v=data[i].v;p=data[i].p; for(int j=m;j>=data[i].v;j--) { f[j]=max(f[j],f[j-v]+v*p); if(data[i].sub[0][0]>=1&&j>=v+data[i].sub[1][0]) f[j]=max(f[j],f[j-v-data[i].sub[1][0]]+v*p+data[i].sub[1][0]*data[i].sub[1][1]); if(data[i].sub[0][0]>=2&&j>=v+data[i].sub[2][0]) f[j]=max(f[j],f[j-v-data[i].sub[2][0]]+v*p+data[i].sub[2][0]*data[i].sub[2][1]); if(data[i].sub[0][0]>=2&&j>=v+data[i].sub[1][0]+data[i].sub[2][0]) f[j]=max(f[j],f[j-v-data[i].sub[1][0]-data[i].sub[2][0]]+v*p+ data[i].sub[1][0]*data[i].sub[1][1]+data[i].sub[2][0]*data[i].sub[2][1]); } } cout<<f[m]<<endl; return 0; } /************************************************************** Problem: 2265 User: admin Language: C++ Result: Accepted Time:51 ms Memory:2200 kb ****************************************************************/