动态规划(Dynamic--Planning),简称DP。
一、求解背包问题的算法归纳——以背包问题为例
1)如果装不下当前物品,那么前n个物品的最佳组合和前n-1个物品的最佳组合是一样的。
2)如果装得下当前物品。
假设1 :装当前物品,在给当前物品预留了相应空间的情况下,前n-1 个物品的最佳组合加上当前物品的价值就是总价值。
假设2:不装当前物品,那么前n个物品的最佳组合和前n-1个物品的最佳组合是-样的。
选取假设1和假设2中较大的价值,为当前最佳组合的价值。
以二维数表为例,则求解过程是从左至右,从上至下:
即先求只装入1个物品时,对应1个容量时的最大价值,再增加容量继续求此时对应的最大价值,直到容量达到MAX,再增加装入物品的数量,重复上述过程,直到物品数量为MAX时,求解完毕。
二、回溯背包物品的算法归纳——求价值最大时是装了哪些物品
我们可以看作是求最优解的逆过程,即先从数表的右下角开始回溯,如果发现前n个物品最佳组合的价值和前n-1个物品最佳组合的价值一样,说明第n个物品没有被装入。否则,第n个物品被装入。当物品编号为0时,即没有物品需要被装入,说明回溯已经结束,根据标识的结果即可得到装入了哪些物品。
实战例题: