动态规划算法求解0-1背包问题
2017-09-26 12:27
190 查看
在使用动态规划算法求解0-1背包问题时,有两个关键的式子:
1)j<wi,m(i,j)=m(i-1,j)
2)j>=wi,m(i,j)=max{m(i,j),m(i-1,j-wi)+vi}
其中,m(i,j)表示当前背包剩余容量j,前i个物品最佳组合对应的价值。wi表示物品i的体积,vi表示物品i的价值。
对于动态规划,我们知道后一个状态的决策是根据前面状态来决定的。而该式子所要到达的目的是通过前面i-1的物品的状态来决定第i的物品的操作。最后的结果是背包的容量剩余j,即m(i,j)。此时,若j<wi,物品放不进去,很明显前面的状态应该是m(i-1,j)。而当j>=wi时,选择物品不放进入,可以知道前一个状态应该是m(i-1,j)。若选择放入,可以计算出上一个状态应该是m(i-1,j-wi),此时放入体积是wi,价值是vi的物品,才会到达m(i,j)状态。
1)j<wi,m(i,j)=m(i-1,j)
2)j>=wi,m(i,j)=max{m(i,j),m(i-1,j-wi)+vi}
其中,m(i,j)表示当前背包剩余容量j,前i个物品最佳组合对应的价值。wi表示物品i的体积,vi表示物品i的价值。
对于动态规划,我们知道后一个状态的决策是根据前面状态来决定的。而该式子所要到达的目的是通过前面i-1的物品的状态来决定第i的物品的操作。最后的结果是背包的容量剩余j,即m(i,j)。此时,若j<wi,物品放不进去,很明显前面的状态应该是m(i-1,j)。而当j>=wi时,选择物品不放进入,可以知道前一个状态应该是m(i-1,j)。若选择放入,可以计算出上一个状态应该是m(i-1,j-wi),此时放入体积是wi,价值是vi的物品,才会到达m(i,j)状态。
相关文章推荐
- 动态规划算法求解0,1背包问题
- 动态规划算法分析及实例——求解完全背包问题(java实现)
- 实验二 动态规划算法 用动态规划法求解0/1背包问题
- 算法导论答案 16.2-2 0-1背包问题的动态规划算法
- C++实现动态规划算法之解决0-1背包问题
- 背包问题——“01背包”最优方案总数的求解
- 背包问题求解总结
- 背包问题----完全背包(详解|代码实现|背包具体物品的求解)
- 动态规划法——求解0-1背包问题
- 0/1背包问题的动态规划法求解 —— Java 实现
- 回溯法——求解0-1背包问题
- (C++)分支限界法求解背包问题
- 回溯法求解0/1背包问题
- 0/1背包问题的动态规划法求解 —— Java 实现
- 动态规划算法0-1背包问题java实现
- 《算法导论》读书笔记之第16章 0-1背包问题—动态规划求解
- 背包问题——“01背包”详解及实现(包含背包中具体物品的求解)
- 回溯法求解0-1背包问题
- 背包问题 求解个数
- 背包问题----完全背包(详解|代码实现|背包具体物品的求解)