记录编号 468476 评测结果 AAAAAAAAAA
题目名称 [NOIP 2006]金明的预算方案 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 C++ 运行时间 0.035 s
提交时间 2017-11-01 10:56:47 内存使用 0.48 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;
inline int get();
int n,m;
int v[61],p[61],q[61],mmp[61][61],temp[61];
int dp[40001];
int main()
{
	freopen("budget.in","r",stdin);
	freopen("budget.out","w",stdout);
	n=get(),m=get();
	for(int i=1;i<=m;i++)
	{
		v[i]=get();
		p[i]=get();
		q[i]=get();
		if(q[i])mmp[q[i]][temp[q[i]]++]=i;
	}
	for(int i=1;i<=m;i++)
	{
		if(q[i])continue;
		for(int j=n;j>=0;j--)
		{
			int a(0),b(0),c(0),d(0);
			int ta=mmp[i][0],tb=mmp[i][1];
			if(j>=v[i])a=dp[j-v[i]]+v[i]*p[i];
			if(ta&&j>=v[i]+v[ta])b=dp[j-v[i]-v[ta]]+v[i]*p[i]+v[ta]*p[ta];
			if(tb&&j>=v[i]+v[tb])c=dp[j-v[i]-v[tb]]+v[i]*p[i]+v[tb]*p[tb];
			if(ta&&tb&&j>=v[i]+v[ta]+v[tb])d=dp[j-v[i]-v[ta]-v[tb]]+v[i]*p[i]+v[ta]*p[ta]+v[tb]*p[tb];
			dp[j]=max(dp[j],max(max(a,b),max(c,d)));
		}
	}
	printf("%d\n",dp[n]);
	return 0;
}
inline int get()
{
	int t=0;char c=getchar(),j=1;
	while(!isdigit(c))
		if(c=='-')j=-1,c=getchar();
		else c=getchar();
	while(isdigit(c))
		t=(t<<3)+(t<<1)+c-'0',
		c=getchar();
	return j*t;
}