许默 @ 2016-10-20 18:49:19
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int a[67],w[67],p[67],n,m,ans,k,f[32007],wl[67],pl[67],x[67];
bool flag=0;
int main()
{
//freopen("in.txt","r",stdin);
pl[0]=1,wl[0]=1;
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&w[i],&p[i],&x[i]);
p[i]=w[i]*p[i];
}
memset(f,0,sizeof(f));
f[w[1]]=p[1];
ans=w[1];
k=1;
for(int i=2;i<=n;i++)
if(!x[i])
{
for(int j=ans;j>=w[k];j--)
if(f[j])
{
wl[wl[0]++]=j,pl[pl[0]++]=f[j];
}
memset(f,0,sizeof(f));
f[w[i]]=p[i];
ans=w[i],flag=0;
k=i;
}
else
{
ans+=w[i];
for(int j=ans;j>=w[i];j--)
if(f[j-w[i]]&&f[j]<f[j-w[i]]+p[i])
{
f[j]=f[j-w[i]]+p[i];
}
flag=1;
}
for(int j=ans;j>=w[k];j--)
if(f[j])
{
wl[wl[0]++]=j;
pl[pl[0]++]=f[j];
}
for(int i=1;i<pl[0];i++)
for(int j=m;j>=wl[i];j--)
f[j]=max(f[j],f[j-wl[i]]+pl[i]);
printf("%d\n",f[m]);
return 0;
}