讲一下背包问题里最简单的LC背包。
有n种物品,每种物品只有一件,每种物品都有他的价值和体积,你有一个体积为v的背包,要在装得下的前提下装价值最多的东西,请你求出这个最大的价值。
f[i][v]表示前i个物品放进体积为v的背包里的最优值。
对于第i件物品要么被放进背包,要么放。
如果不放,前i件物品放进v的背包的最优值就等于前i-1件物品放进v的背包里的最优值。
如果放,前i件物品放进v的背包的最优值就等于前i-1件物品放进体积为v-w[i](Wi是第i个物品的体积)的背包的最优值加上第i件物品的价值。
so
LC背包的方程
这是二维的写法。
因为第i层的状态只和i-1层有关,所以我们可以省掉第一维。
但是如果这样v要从大到小枚举,因为如果从小到大的话,你在算第i层用到第i-1层时,第i=-1层可能已经被更新过了。简而言之就是一个物品可能会被假如背包很多次,但题目明确指出一个物品只有一个。
LC一维数组的方程
OlccK!
水博客之LC背包
最新推荐文章于 2018-05-14 21:15:57 发布