动态规划算法求解0-1背包问题

来源:互联网 发布:王俊凯人品知乎 编辑:程序博客网 时间:2024/06/09 11:21

在使用动态规划算法求解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)状态。