梦之动态规划
来源:互联网 发布:淘宝视频编辑软件 编辑:程序博客网 时间:2024/03/29 07:33
题解
动态规划所处理的问题是一个多阶段决策问题
初始状态→│决策1│→│决策2│→…→│决策n│→结束状态
动态规划可以看成形成一个决策序列,即上一步的决策影响当前一步的决策,但与下一步的决策无关。当最后一步的决策完成时,也就形成了这个决策序列,最后一步的决策也就是原问题的解。
No1:0-1背包问题
问题描述:1……n个物品,其质量为wi(i=1……n),其价值为pi。背包最多能容纳的重量为C,不限体积。物品只能全部放入或选择不放入,不能切割。现求解怎么样才能使背包装入的物品总价值最大。
问题分析:将对n个物品的决策按照一定的顺序进行,形成一串决策序列,即:首先考虑第一个物品1取与不取,再考虑第二个物品取与不取,因为前一个物品如果决策是选择的话,那么对于后一个物品的来说,背包的剩余容量是不一样的,而如果前一个物品不选,则对于后一个物品来说,背包的剩余容量不变。由此,可以看出决策序列的顺序性,当前决策受到前一个决策的影响。
参考答案:定义M(y,j)为当背包剩余容量为j,可选择的物品编号为 y到n个物品时,所能产生的最大价值。
原问题为M(1,C),表示背包为空,从1到n号物品(即所有物品)可供选择时所能产生的最大价值。
递推式如下:
图1-1
当j>=wi(背包剩余容量比当前需要做决策的物品重量更大),则有两种情况:选与不选。
如果选择的话,那么背包剩余容量=之前背包剩余容量-放入背包的该物品的重量wi,背包的价值=之前背包里的价值+当前放入背包的物品的价值pi。当前决策完成之后,剩余可供选择的物品编号就要向前加1。
即:M(i+1,j-wi)+pi;
如果不选择的话,那么背包剩余容量不变,背包里的价值也不变,完成当前决策后,剩余可供选择物品编号也要加1。
即:M(i+1,j)
因为这只是可供选择的两种决策方案,所以想要取得最大价值,当然得选择这两种决策影响下的方案所能产生的更大解。Max{a,b}表示取a和b两者中更大的一个为解。
当j<wi ,则表示当前物品根本放不下去。那么也就不用抉择了,直接继续下一个物品的决策,把物品编号加1,j不变。
M(i+1,j)
最后也就是边界条件。当j<Wn时,M(n,j)=0;当j>Wn时,M(n,j)=Wn。
- 梦之动态规划
- 动态规划之树形动态规划
- 动态规划之LCS
- hdu1501之动态规划
- poj之动态规划
- 动态规划之练习题
- 动态规划之 <筷子>
- LeetCode 之动态规划
- 动态规划之背包
- 动态规划之三角形
- 算法之动态规划
- 算法之动态规划
- 动态规划之Palindrome
- 算法之动态规划
- 算法之动态规划
- 动态规划之HouseRobber
- 算法之动态规划
- 动态规划之硬币
- using curl on mingw
- jquery ajax load
- advanced install打包mysql数据库
- CI 框架自定义数据库连接配置
- 最简单的Java I/O实现-3行代码实现
- 梦之动态规划
- Eclipse代码自动提示(内容辅助content assist)
- Java代码调用操作系统可执行文件打开相应文件一行代码实现
- 正能量
- 分析常见的java的关键字
- JavaSE学习笔记
- Android数据存储之文件存储
- ubuntu12.04配置交叉编译环境
- linux新的API signalfd、timerfd、eventfd使用说明——signalfd