您的位置:首页 > 其它

题目1455:珍惜现在,感恩生活

2014-10-23 22:33 197 查看
#include<stdio.h>
struct E{
int w;
int v;
}list[2001];
int dp[101];
int max(int a,int b){ return a>b?a:b;}
int main(){
int T;
scanf("%d",&T);
while(T--){
int s,n;
scanf("%d%d",&s,&n);
int cnt=0;
for(int i=1;i<=n;i++){
int v,w,k;
scanf("%d%d%d",&w,&v,&k);
int c=1;
while(k-c>0){
k-=c;
list[++cnt].w=c*w;
list[cnt].v=c*v;
c*=2;

}
list[++cnt].w=w*k;
list[cnt].v=v*k;
}
for(int i=0;i<=s;i++) dp[i]=0;
for(int i=1;i<=cnt;i++){
for(int j=s;j>=list[i].w;j--){
dp[j]=max(dp[j],dp[j-list[i].w]+list[i].v);
}
}
printf("%d\n",dp[s]);
}
return 0;
}


参考:王道
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐