显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int x[32001];
struct wp
{
int v,w;
};
wp sd[61][5];
int n,m,a,b,c,cnt=0;
int main()
{
freopen("budget.in","r",stdin);
freopen("budget.out","w",stdout);
scanf("%d%d",&n,&m);
for(register int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(c==0)
{
sd[i][0].v++;
for(int j=1;j<=4;j++)
{
sd[i][j].v+=a*b;
sd[i][j].w+=a;
}
}
else
{
int fjh=++sd[c][0].v;
sd[c][fjh].v+=a*b;
sd[c][fjh].w+=a;
sd[c][4].v+=a*b;
sd[c][4].w+=a;
}
}
for(register int i=1;i<=m;i++)
{
int jl=sd[i][0].v,sx;
if(jl==0)
{
continue;
}
if(jl==1)
{
sx=1;
}
if(jl==2)
{
sx=2;
}
if(jl==3)
{
sx=4;
}
for(register int sv=n;sv>=0;sv--)
{
for(register int k=1;k<=sx;k++)
{
if(sv>=sd[i][k].w)
x[sv]=max(x[sv],x[sv-sd[i][k].w]+sd[i][k].v);
//cout<<x[sv]<<endl;
}
}
}
printf("%d",x[n]);
return 0;
}