#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n,m,f[32010],ha[65],p[65],q1[65],q2[65];
struct node
{
int pr,im,belong;
};
node a[65];
void init()
{
freopen("jmys.in","r",stdin);
freopen("jmys.out","w",stdout);
}
void readdata()
{
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].pr,&a[i].im,&a[i].belong);
}
for(int i=1;i<=n;i++)
{
if(a[i].belong!=0)
{
if(ha[a[i].belong]==0)
{
q1[a[i].belong]=i;
ha[a[i].belong]=1;
continue;
}
if(ha[a[i].belong])
{
q2[a[i].belong]=i;
}
}
}
//printf("%d",a[0].pr);
//for(int i=1;i<=n;i++)
//printf("%d %d ",q1[i],q2[i]);
}
void work()
{
for(int i=1;i<=n;i++)
{
if(a[i].belong!=0) continue;
for(int j=m;j>=0;j--)
{
if(a[i].pr<=j)
f[j]=max(f[j],f[j-a[i].pr]+a[i].pr*a[i].im);
if((a[i].pr+a[q1[i]].pr)<=j)
f[j]=max(f[j],f[j-a[i].pr-a[q1[i]].pr]+a[i].pr*a[i].im+a[q1[i]].pr*a[q1[i]].im);
if((a[i].pr+a[q1[i]].pr+a[q2[i]].pr<=j))
f[j]=max(f[j],f[j-a[i].pr-a[q1[i]].pr-a[q2[i]].pr]+a[i].pr*a[i].im+a[q1[i]].pr*a[q1[i]].im+a[q2[i]].pr*a[q2[i]].im);
}
}
printf("%d",f[m]);
}
int main()
{
//init();
readdata();
work();
return 0;
}
rqnoj-6-金明的预算方案
最新推荐文章于 2019-11-21 08:18:52 发布