比赛 |
防止颓废的小练习v0.3 |
评测结果 |
AAAAAAAAAA |
题目名称 |
宝物筛选 |
最终得分 |
100 |
用户昵称 |
农场主 |
运行时间 |
0.511 s |
代码语言 |
C++ |
内存使用 |
0.46 MiB |
提交时间 |
2016-10-19 10:57:40 |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#define maxn 40001
using namespace std;
class poi{
public:
int v,w;
};
vector<poi> vec;
int v,w,c;
int n,m;
int d[maxn]={0};
void make(int v,int w,int c){
int t=1;
while(c){
if (c<t) t=c;
vec.push_back((poi){v*t,w*t});
c=c-t;
t<<=1;
}
}
void read(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
scanf("%d%d%d",&v,&w,&c);
make(v,w,c);
}
}
void DP(){
int ans=0;
for (int i=0;i<vec.size();i++){
poi p=vec[i];
for (int j=m;j>=0;j--){
if (j+p.w<=m){
d[j+p.w]=max(d[j+p.w],d[j]+p.v);
ans=max(d[j+p.w],ans);
}
// printf("%d ",d[j+p.w]);
}
// printf(" %d %d\n",p.v,p.w);
}
printf("%d",ans);
}
int main(){
freopen("treasure.in","r",stdin);
freopen("treasure.out","w",stdout);
read();
DP();
return 0;
}