- 01背包
- 完全背包
- 多重背包
01背包
有N件物品和一个容量为C的背包。 第i件物品的 重量为 c[i] , 价值为 v[i]。 求解将哪些物品装入背包可使价值总和最大。
思路: 将前i件物品放入容量为C的背包中, 若只考虑第i件物品的策略 (放或者不放), 那么就可以转化为 一个只 牵扯 前 i-1 件物品的问题。
定义状态: f[i][C] = max{f[i - 1][C], f[i - 1][C - c[i]] + v[i]} f[i][C]表示将前i件物品放入一个容量为C的背包可以获得的最大价值。
如果不放第i件物品, 那么问题就转化为 将前i-1件物品放入容量为C的背包中,此时能获得的最大价值为f[i-1][C]。
如果放第i件物品,那么问题就转化为 将前i-1件物品放入容量为C-c[i]的背包中,此时能获得的最大价值就是f[i-1][C-c[i]] 再加上 通过放入第i件物品获得的价值v[i]。