记录编号 8412 评测结果 AAAAAAAAAA
题目名称 [BYVoid S1] 灵魂分流药剂 最终得分 100
用户昵称 Gravatarzqzas 是否通过 通过
代码语言 C++ 运行时间 2.712 s
提交时间 2008-11-13 22:22:59 内存使用 18.25 MiB
显示代码纯文本
#include <iostream>
#include <string.h>

#define MAXN 15
#define MAXV 111
#define MAXLONG 50

using namespace std;

class hplus{
public:
	short cnt,num[MAXLONG];
	hplus()
	{
		cnt=1;
		num[0]=0;
	}
	void plus(int c)
	{
		short i,max_cnt,jin=0;
		hplus b;
		char zan[MAXLONG];
		sprintf(zan,"%d",c);
		b.cnt=strlen(zan);
		for (i=0;i<b.cnt;i++)
			b.num[i]=zan[b.cnt-i-1]-'0';
		if (cnt>b.cnt)
			max_cnt=cnt;
		else
			max_cnt=b.cnt;
		for (i=0;i<=max_cnt;i++)
		{
			if (i>=cnt)
				num[i]=0;
			if (i>=b.cnt)
				b.num[i]=0;
			num[i]=num[i]+b.num[i]+jin;
			jin=num[i]/10;
			num[i]%=10;
		}
		cnt=max_cnt;
		if (num[cnt]!=0)
			cnt++;
	}

	void copy(hplus b)
	{
		int i;
		cnt=b.cnt;
		for (i=0;i<cnt;i++)
			num[i]=b.num[i];
	}
	int compare(hplus b)
	{
		if (cnt>b.cnt)
			return 1;
		if (cnt<b.cnt)
			return -1;
		int i;
		for (i=cnt-1;i>=0;i--)
		{
			if (num[i]>b.num[i])
				return 1;
			if (num[i]<b.num[i])
				return -1;
		}
		return 0;
	}
	void print()
	{
		int i;
		for (i=cnt-1;i>=0;i--)
			printf("%d",num[i]);
	}
	bool operator >(hplus b)
	{
		if (compare(b)>0)
			return true;
		return false;
	}
	hplus operator =(hplus b)
	{
		copy(b);
		return *this;
	}
	hplus operator +(int b)
	{
		hplus zan=*this;;
		zan.plus(b);
		return zan;
	}
};
typedef hplus var;

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

void run()
{
	int i,j,k,p;
	var 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;
			}
/*	f[n][v1][v2].print();
	cout<<endl;
	(f[n][v1][v2]+4000).print();
	cout<<endl;*/
	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();
	ans.print();
//	cout<<ans;
	return 0;
}