您的位置:首页 > 其它

背包问题

2015-11-11 00:19 232 查看
读《背包九讲》的几点感受,这里mark一下。

a.01背包问题题目描述:

  有N件物品和一个容量为V 的背包。放入第i件物品耗费的空间是Ci,得到的价值是Wi。求解将哪些物品装入背包可使价值总和最大。

该问题的解决的一般思路是:写状态转移方程、动态规划。

//我的代码
#include <stdio.h>
#include <string.h>
const int num=501,oo=1000000000;
int f[10001]={0},p[num],w[num];
int main()
{
int t,n,weight_e,weight_f,i,j,weightpig;
scanf("%d",&t);
while (t--){

scanf("%d%d",&weight_e,&weight_f);
for (i=1;i<=weight_f;i++) f[i]=oo;
weightpig=weight_f-weight_e;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d%d",&p[i],&w[i]);

for (i=1;i<=n;i++){
for (j=w[i];j<=weightpig;j++){
if (f[j-w[i]]+p[i]<f[j]) f[j]=f[j-w[i]]+p[i];
}
}

if (f[weightpig]==oo){
printf("This is impossible.\n");
}
else{
printf("The minimum amount of money in the piggy-bank is %d.\n",f[weightpig]);
}
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: