动态规划解0-1背包问题
2012-04-01 20:43
162 查看
题目如下:
试用动态规划的方法,求解0-1背包问题:有一背包,能装入物体总重量为C,有n个物体,重量为w1,w2,..,wn,价值分别为v1,v2,…vn。试求一种装载方案,使得背包装载的物体总价值最大。其中,C,
w都是整数。
解题思路:
简单dp
试用动态规划的方法,求解0-1背包问题:有一背包,能装入物体总重量为C,有n个物体,重量为w1,w2,..,wn,价值分别为v1,v2,…vn。试求一种装载方案,使得背包装载的物体总价值最大。其中,C,
w都是整数。
解题思路:
简单dp
试用动态规划的方法,求解0-1背包问题: 有一背包,能装入物体总重量为C, 有n个物体,重量为w1,w2,..,wn, 价值分别为v1,v2,…vn。试求一种装载方案, 使得背包装载的物体总价值最大。其中,C, w都是整数。*/ #include<stdio.h> #define N 50 int max(int a,int b) { return a>b?a:b; } void KnapSack(int n,int C,int w[],int m[]) { int i,j,V ,x ; for(i=0;i<=n;i++) V[i][0]=0; for(j=0;j<=C;j++) V[0][j]=0; for(i=1;i<=n;i++) { for(j=1;j<=C;j++) { if(j<w[i]) V[i][j]=V[i-1][j]; else V[i][j]=max(V[i-1][j],V[i-1][j-w[i]]+m[i]); } } j=C; for(i=n;i>0;i--) { if(V[i][j]>V[i-1][j]) { x[i]=1; j=j-w[i]; } else x[i]=0; } printf("构成最大价值的物品是:"); for(i=1;i<=n;i++) { if(x[i]!=0) printf("%d ",i); } printf("\n最大价值为:%d\n",V [C]); } void main() { int w ,m ; int C,i,n; printf("请输入背包的容量:"); scanf("%d",&C); printf("请输入物品的个数:"); scanf("%d",&n); printf("请输入每个物品的质量和价值,以分号隔开\n"); w[0]=m[0]=0; for(i=1;i<=n;i++) { printf("第%d个物品的质量和价值分别为:",i); scanf("%d%d",&w[i],&m[i]); } KnapSack(n,C,w,m); }
相关文章推荐
- 夕拾算法进阶篇:18)装箱问题 (01背包_动态规划DP)
- 背包问题 -- 动态规划
- 动态规划---0-1背包问题
- 动态规划0-1背包问题
- POJ 3132 Sum of Different Primes 动态规划 DP 0-1背包问题
- 动态规划,背包问题,卡题(CRB and His Birthday,HDU 5410)
- 动态规划之背包问题
- 动态规划之背包问题
- [转载]动态规划之0-1背包问题
- 0-1背包问题---动态规划
- 01背包问题(当有的背包重量是非整数时)的递归(优化成动态规划+再用滚动数组优化)解法+一些动态规划(递归,搜索)的高级技巧
- 0-1背包问题入门小结 动态规划(DP)经典题目 POJ324 POJ1276
- 编程算法 - 背包问题(三种动态规划) 代码(C)
- 算法导论16.2-2--动态规划(0-1背包问题)
- 动态规划 (Dynamic Programming) 之 背包问题合辑 (Knapsack, Subset Sum, Partition and change making problem )
- 背包问题(动态规划)
- 【动态规划】从子集和问题到背包问题
- 动态规划之背包问题-总结和拓展(二)
- 动态规划 背包问题
- scala 动态规划解决0-1背包问题