比赛 20120807 评测结果 WWWEEEEEEE
题目名称 宝物筛选 最终得分 0
用户昵称 TBK 运行时间 1.494 s
代码语言 C++ 内存使用 0.77 MiB
提交时间 2012-08-07 11:41:44
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int a[100][3],b,c,d,f[2][40001],l,m,n,x[40001],y=1,z;
bool bo;
int main(void)
{
	freopen("treasure.in","r",stdin);
	freopen("treasure.out","w",stdout);
	scanf("%d%d",&b,&c);
	for (d=0;d<c;d++) 
	{
		f[bo][d]=-1;
		f[!bo][d]=-1;
	}
	for (d=0;d<b;d++) scanf("%d%d%d",&a[d][0],&a[d][1],&a[d][2]);
	for (d=0;d<b;d++)
	{
		z=y;
		for (l=0;l<z;l++)
		{
			for (m=1;m<=a[d][2];m++)
			{
				n=(f[bo][x[l]]>-1?f[bo][x[l]]:f[bo][x[l]]+1)+a[d][0]*m;
				if (x[l]+a[d][1]*m<=c) 
				{
					if (f[bo][x[l]+a[d][1]*m]==-1) 
					{
						x[y]=x[l]+a[d][1]*m;
						y++;
					}
					if (f[bo][x[l]+a[d][1]*m]<n) f[!bo][x[l]+a[d][1]*m]=n;
				}
					else break;
			}
		}
		for (l=0;l<z;l++)
			f[!bo][x[l]]=f[!bo][x[l]]>f[bo][x[l]]?f[!bo][x[l]]:f[bo][x[l]];
		bo=!bo;
	}
	z=-1;
	for (d=0;d<=c;d++)
		if (f[bo][d]>z) z=f[bo][d];
	printf("%d",z);
	fclose(stdin);
	fclose(stdout);
	return 0;
}