//BUG fix #include #include #include using namespace std; const int MAX_M = (int)3.2e4+5; int n,m; int v[MAX_M],p[MAX_M],q[MAX_M]; int tot=0; int arr[MAX_M]; int subNum[MAX_M]; struct Item{ int v,p,q; int subNum; }items[MAX_M]; int dp[(int)3.2e4+5]; int main(){ ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=m;i++){ cin>>v[i]>>p[i]>>q[i]; } for(int i=1;i<=m;i++){ for(int j=1;j<=m;j++){ if(q[j]==i){ items[++tot].v=v[j], items[tot].p=p[j], items[tot].q=q[j]; items[i].subNum++; } } if(q[i]==0){ items[++tot].v=v[i], items[tot].p=p[i], items[tot].q=q[i]; } } for(int i=1;i<=m;i++){ for(int j=n;j>=0;j--){ if(items[i].subNum==2&&j>=(items[i+1].v+items[i+2].v)){ dp[j]=max(dp[j],dp[j-(items[i+1].v+items[i+2].v)]+(items[i+1].v*items[i+1].p)+(items[i+2].v*items[i+2].p)); }else if((items[i].subNum==2&&j>=items[i+1].v) || (items[i].subNum==1&&j>=items[i+1].v)){ dp[j]=max(dp[j],dp[j-items[i+1].v]+(items[i+1].v*items[i+1].p)); }else if(items[i].subNum==2&&j>=items[i+2].v){ dp[j]=max(dp[j],dp[j-items[i+2].v]+(items[i+2].v*items[i+2].p)); }else if(j>=items[i].v){ dp[j] = max(dp[j],dp[j-items[i].v]+items[i].v*items[i].p); } } } cout<