算法导论16.2-2--动态规划(0-1背包问题)
来源:互联网 发布:java单线程改多线程 编辑:程序博客网 时间:2024/06/17 05:46
转载出处:http://blog.csdn.net/luoshixian099/article/details/46572285
背包问题
小偷发现了n个商品,第i个商品重量为
由于对一个商品,要么被拿走要么不被拿走,所以被称为0-1背包问题。
我们如果采取枚举法进行比较,将会有
下面分析背包问题的性质:
动态规划
最优子结构
令
则问题变为求
对于第k个商品,决定是否装包,需要进行比较,如果拿装包即
自底向上求解方案
算法复杂度为O(nW)
令c[i][j]表示第1个商品到第i个商品中,背包容量为j的情况下,可获得的最大价值;
决定是否选择商品i的方案,比较选与不选的获得的价值
c[i][j] = max(c[i-1][j] ,v[i]+c[i-1][j-w[i]])
例:
- 1
- 2
- 3
- 4
采用自底向上求解方案,先填写第一行c[1][j],此时只有商品1可选,当
填写第二行:c[2][j],此时可选商品为1和2 。当
又如:当j=10时,如果选择商品2,则背包容量还剩j-w[2]=4;而c[1][4]=4,此时背包总价值为c[2][10]=v[2]+c[1][4]=6+4=10;如果不选商品2,c[2][10] =c[1][10]=4;选取最大值即c[2][10]=10;
按照上述方式自底向上填写表格:
构造最优解
按照上面描述:如果c[i][j] = c[i-1][j],表明商品i没有被选择;否则就被选择
从表格的右下端开始,即c[5][10],回溯。
如
完整代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 算法导论--动态规划(0-1背包问题)
- 算法导论16.2-2--动态规划(0-1背包问题)
- 算法导论答案 16.2-2 0-1背包问题的动态规划算法
- 算法导论_01背包问题.(动态规划)
- 《算法导论》之动态规划和贪心算法 0-1背包问题
- 算法导论第16章 贪心算法-0-1背包问题—动态规划求解
- 《算法导论》第15章-动态规划之0-1背包问题
- 0-1背包问题动态规划算法
- 简单0-1背包问题(算法类别:动态规划)
- 0-1背包问题(动态规划算法)
- 算法导论学习笔记(十三):动态规划(三):01背包问题
- 算法导论 ch15 动态规划 01背包
- 0-1背包算法(动态规划)
- 算法导论16.2-2 0-1背包问题
- 0-1背包问题(动态规划)
- 0-1背包问题(动态规划)
- 动态规划(0-1背包问题)
- 0-1背包问题(动态规划)
- 手机端 rem 的使用
- 解决linux安装软件:/lib/ld-linux.so.2: bad ELF interpreter问题
- 点击微信内网页a标签,直接跳转打开淘宝APP的方法如此简单
- 各领域数据集
- 独家 | 成功创业者9点建议:编程技术?其实没那么重要!
- 算法导论16.2-2--动态规划(0-1背包问题)
- 【LeetCode解答七】Roman to Integer问题Java解答
- 报名 | 清华大学iCenter产业创新交流会
- 轮子
- 前端的调试详解
- 【C++】模拟实现一个复数类,要求实现 加,减,乘,除等基本运算符的重载
- 福利 | 与院士和业界翘楚共话智能无人系统!
- 自定义View-仿Flipboard动画
- 第一章 unix基础知识