动态规划 DP 应用之 01 背包
问题描述:n 个不同的物品,每个物品只有一个,有价值 value 和重量 weight 两个属性;背包容量 w。求背包所能容纳的最大价值。
最优子结构:当我们把一件物品放进背包里时,会让总价值变高,并且让背包变重。对某一件物品来说,我们可以选择放或不放,然后移去这件物品所带来的影响。
c(n, w) = max( c(n-1, w), c(n-1, w-W[n]) + C[n] ) ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ 不放 -> 0 放 -> 1
n:第1个到第n个物品要放进背包内。 w:背包负重上限。 c(n, w):第1个到第n个物品尽量塞进负重限制为w的背包时,最大价值。 W[n]:第n个物品的重量。 C[n]:第n个物品的价值。