比赛 20120807 评测结果 WWWWWWWWWW
题目名称 宝物筛选 最终得分 0
用户昵称 Truth.Cirno 运行时间 0.142 s
代码语言 C++ 内存使用 76.77 MiB
提交时间 2012-08-07 10:39:26
显示代码纯文本
#include <cstdio>
using namespace std;

int f[40001],w[10000001],v[10000001],squ[10000]={1};

int main(void)
{
	freopen("treasure.in","r",stdin);
	freopen("treasure.out","w",stdout);
	int i,j,temp,n,W,c=0,vt,wt,mt;
	for (i=1;i<10000;i++)
		squ[i]=2*squ[i-1];
	scanf("%d%d",&n,&W);
	for (i=0;i<n;i++)
	{
		scanf("%d%d%d",&vt,&wt,&mt);
		for (temp=0;;temp++)
			if (squ[temp]>mt)
				break;
		temp--;
		for (j=0;j<temp;j++)
		{
			v[c]=vt*squ[j];
			w[c]=wt*squ[j];
			c++;
		}
		temp=mt-squ[temp-1];
		if (temp)
		{
			v[c]=vt*temp;
			w[c]=wt*temp;
			c++;
		}
	}
	for (i=0;i<c;i++)
		for (j=W;j>=w[i];j--)
		{
			temp=f[j-w[i]]+v[i];
			if (f[j]<temp)
				f[j]=temp;
		}
	printf("%d\n",f[W]);
	return(0);
}