背包问题

  1. 01背包
  2. 完全背包
  3. 多重背包

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]。

 

你可能感兴趣的:(数据结构与算法)