比赛 |
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;
}