您的位置:首页 > 其它

hdu 2602 Bone Collector

2014-03-08 19:40 155 查看

01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }

f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。

Pi表示第i件物品的价值。

决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ?

#include<stdio.h>
#include<string.h>
int dp[1010][1010],w[1010],val[1010];
int max(int a,int b){
return a>b?a:b;
}
int main(){
int n,m,i,j,t;

scanf("%d",&t);
while(t--){
memset(dp,0,sizeof(dp));
memset(w,0,sizeof(w));
memset(val,0,sizeof(val));
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&val[i]);
}
for(i=1;i<=n;i++){
scanf("%d",&w[i]);
}
for(i=1;i<=n;i++){
for(j=0;j<=m;j++){
if(j>=w[i]){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+val[i]);//放还是不放的选择

}else{
dp[i][j]=dp[i-1][j];
}
}
}
printf("%d\n",dp
[m]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: