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