Steiner @ 2022-04-03 15:14:35
#include <iostream>
using namespace std;
long long dp[32010],v[32010],w[32010];
int maini[32010][2]={0};
bool ismain[32010];
int main()
{
int n,m,ans=0;
cin>>n>>m;
for(int i=0;i<m;i++)
{
int q;
cin>>v[i]>>w[i]>>q;
w[i]*=v[i];
if(q==0) ismain[i]=true;
else if(maini[0]==0) maini[q][0]=i;
else maini[q][1]=i;
}
for(int i=0;i<m;i++)
if(ismain[i]) for(int j=n;j>=v[i];j--)
{
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
if(j>=v[maini[i][0]]+v[maini[i][1]]+v[i]) dp[j]=max(dp[j],dp[j-v[i]-v[maini[i][0]]-v[maini[i][1]]]+w[maini[i][0]]+w[maini[i][1]]+w[i]);
if(j>=v[maini[i][0]]+v[i]) dp[j]=max(dp[j],dp[j-v[i]-v[maini[i][0]]]+w[maini[i][0]]+w[i]);
if(j>=v[maini[i][1]]+v[i]) dp[j]=max(dp[j],dp[j-v[i]-v[maini[i][1]]]+w[maini[i][1]]+w[i]);
}
cout<<dp[n];
return 0;
}