比赛 |
防止颓废的小练习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]);
}