比赛 NOIP2008集训模拟4 评测结果 AAAAAAAAAA
题目名称 灵魂分流药剂 最终得分 100
用户昵称 zqzas 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2008-11-13 11:14:39
显示代码纯文本
#include <iostream>

#define MAXN 15
#define MAXV 111

using namespace std;

int n,ans,v1,v2,c1[MAXN][110],c2[MAXN][110],w[MAXN][110],box[MAXN],f[MAXN][MAXV][MAXV];

void run()
{
	int i,j,k,p,max;
	for (k=1;k<=n;k++)
		for (i=0;i<=v1;i++)
			for (j=0;j<=v2;j++)
			{
				//不放
				max=f[k-1][i][j];
				//放一个
				for (p=1;p<=box[k];p++)
				{
					if (i-c1[k][p]>=0 && j-c2[k][p]>=0)
						if (f[k-1][i-c1[k][p]][j-c2[k][p]]+w[k][p]>max)
							max=f[k-1][i-c1[k][p]][j-c2[k][p]]+w[k][p];
				}
				f[k][i][j]=max;
			}
	ans=0;
	for (i=0;i<=v1;i++)
		for (j=0;j<=v2;j++)
			if (f[n][i][j]>ans)
				ans=f[n][i][j];

}

void ini()
{
	int i,u,a,b,c,d,p;
	scanf("%d%d%d%d",&u,&n,&v1,&v2);
	for (i=1;i<=u;i++)
	{
		scanf("%d%d%d%d",&a,&b,&c,&d);
		p=++box[c];
		c1[c][p]=a;
		c2[c][p]=b;
		w[c][p]=d;
	}
}

int main()
{
	freopen("soultap.in","r",stdin);
	freopen("soultap.out","w",stdout);
	ini();
	run();
	printf("%d",ans);
	return 0;
}