才开始学DP,先写两种最简单的背包吧:
动态规划的核心思想:避免重复计算,要联系之前已经计算过的最优值。
一、0-1背包
0-1背包的题意是指:有n样物品需要被放进背包,背包可容纳的质量为w,背包内含物品的总价为v。第i样物品的质量为wi,价值为vi。需要尽量利用w,来使v最大。因此在规划时,每样物品只有带或不带两个选项。
因为有求最大v,因此采用DP算法。
根据列表的思想,应该建立二维数组dp,代表共有i样物品时,背包最大容量为j时,背包内物品的最大价值。
写出DP状态转移方程: (j>wi)
意为:在不装入第i件,或装入第i件物品之间选择价值高的一种方案。
若要优化空间复杂度,则使用一维数组,但注意第二重循环时,只能逆向循环,避免覆盖已优化的值。
二、完全背包
完全背包的题意是指:有n种物品需要被放进背包,背包可容纳的质量为w,背包内含物品的总价为v。第i种物品的质量为wi,价值为vi。需要尽量利用w,来使v最大。和0-1背包不同的是,每种物品都有无数件ÿ