动态规划-0-1背包问题
2015-08-17 20:33
295 查看
简述问题:给定n中物品和1个背包,物品i的重量wi,价值为vi,背包容量为C,问如何选择背入背包,使得包内总价值最大。此问题通过数学表达为:求
可以得到递归关系,(动态规划中,最重要的就是得到递归关系)
算法实现:
可以得到递归关系,(动态规划中,最重要的就是得到递归关系)
算法实现:
public static void knapsack(int []v,int []w,int c,int [][]m) { int n = v.length(); int Jmax = Math.min(c,w -1); for(int i=0;i<=Jmax;i++) m [i] = 0; for(i = w ,i<=c;i++) m [i] = v ; for(i = n-1;i>1;i--) { Jmax = Math.min(c,w[i]-1); for(j = 0;j<=Jmax,j++) m[i][j] = 0; for(j = w[i];j<=c;j++) m[i][j] = Math.max(m[i+1][j],m[i+1][j-w[i]]+v[i]); } m[1][c] = m[2][c]; if(c >= w[1]) m[1][c] = Math.max(m[2][c],m[2][c-w[1]]+v[1]); } public static void traceback(int [][]m,int []w,int []v,int []x,int c) { for(int i=1;i<n;i++) { if(m[i][c] == m[i+1][c]) x[i] = 0; else { x[i] = 1; c = c-w[i]; } } x = m [c]>0?1:0; }
相关文章推荐
- 快速打开 Mac OS X 隐藏的用户资源库文件夹
- 正确openvSwitch不同种类port认识
- HDU 1848 Fibonacci again and again(SG函数)
- DataTable 转化为List
- BestCoder Round #50 (div.2)
- HDOJ Matrix multiplication 4920【矩阵相乘】
- Complete uninstall on Mac, HELP!
- 2015.7.30 第五堂(补)delegate 三部曲理解之三(使用delegate)
- solaris 软件包地址
- 流动python - 写port扫描仪和各种并发尝试(多线程/多进程/gevent/futures)
- 一致性哈希算法学习及JAVA代码实现分析
- 关于mini2440按键中断的配置
- Android之——退出多个Activity
- 关于xcode 断点的设置
- [效率提升]工作中的那些命令行
- java中split以"."分割
- [cf193c]Students' Revenge解题报告
- LeetCode-Single NumberI II III
- hdu 1874 畅通工程续(迪科斯彻算法)
- Android:Unable to resolve target ‘android-8’问题解决