题意概要:有 n 个物品和一个容量为 W 的背包,每个物品有重量 w_{i} 和价值 v_{i} 两种属性,要求选若干物品放入背包使背包中物品的总价值最大且背包中物品的总重量不超过背包的容量。
在上述例题中,由于每个物体只有两种可能的状态(取与不取),对应二进制中的 0 和 1,这类问题便被称为「0-1 背包问题」。
例题中已知条件有第 i 个物品的重量 w_{i},价值 v_{i},以及背包的总容量 W。
设 DP 状态 f_{i,j} 为在只能放前 i 个物品的情况下,容量为 j 的背包所能达到的最大总价值。
考虑转移。假设当前已经处理好了前 i-1 个物品的所有状态,那么对于第 i 个物品,当其不放入背包时,背包的剩余容量不变,背包中物品的总价值也不变,故这种情况的最大价值为 f_{i-1,j};当其放入背包时,背包的剩余容量会减小 w_{i},背包中物品的总价值会增大 v_{i},故这种情况的最大价值为 f_{i-1,j-w_{i}}+v_{i}。 由此可以得出状态转移方程:
物品放入背包后, ,那么背包剩余的容量就会减少,所以容量是 j-w[i]