比赛 防止颓废的小练习v0.3 评测结果 AAAAAAAAAA
题目名称 宝物筛选 最终得分 100
用户昵称 SOBER GOOD BOY 运行时间 0.379 s
代码语言 C++ 内存使用 0.46 MiB
提交时间 2016-10-19 14:56:15
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<deque>
using namespace std;
const int maxv=51000,maxn=301;
int f[maxv]={0};
struct Node{
	int num,data;
	Node(int a,int b)
	{
		num=a,data=b;
	}
};
void Init();
int main()
{
	freopen("treasure.in","r",stdin);
	freopen("treasure.out","w",stdout);
	Init();
	return 0;
}
void Init()
{
	deque<Node> q;
	int n,W;
	scanf("%d%d",&n,&W);
	for(int i=1;i<=n;i++)
	{
		int c,w,t;
		scanf("%d%d%d",&c,&w,&t);
		for(int j=0;j<w;j++)
		{
			q.clear();
			for(int k=0;k<=W/w;k++)
			{
				int temp=f[j+k*w]-k*c;
				while(!q.empty()&&temp>=q.back().data) q.pop_back();
				q.push_back(Node(k,temp));
				if(!q.empty()&&q.front().num<k-t) q.pop_front();
				f[j+k*w]=q.front().data+k*c;
			}
		}
	}
	printf("%d",f[W]);
}