sanwen的博客
  • Home
  • Categories
  • Tags
  • Archives

背包问题——动态规划

0-1背包问题¶

问题描述:有N个物品,物品i的重量为$w_i$,价值为$v_i$。有一个背包,能装入的最大重量为W。求将哪些物品放入背包使得背包内的价值最大。

解题思路:0-1背包问题中,每个物品有两种选择,放入背包或者不放入背包。另一种说法,每个物品只能选0个或1个。 考虑第N个物品,只有两种情况,放入背包和不放入背包。 当放入背包,背包剩余容量$W-w_N$。那么我们需要求一个子问题:前N-1个物品放入容量为$W-w_N$的背包能得到的最大价值。加上物品N的价值,即为这种情况得到的最大价值。 当不放入背包,那么我们需要求解子问题:前N-1个物品放入容量为W的背包能得到的最大价值。 比较这两种情况,价值大的即为最终的结果。

状态转移方程:有了上面的分析。我们令F[i,w]表示前i个物品,放入容量为w的背包能得到的最大价值。有状态转移方程:

$F[i,w] = max(F[i-1,w-w_i] + v_i \ , \ F[i-1, w])$

Written with StackEdit.


  • « 使用Spring的Mail组件发送邮件
  • 24点算法的JAVA实现 »

Published

4月 28, 2014

Category

算法

Tags

  • 动态规划 2
  • Powered by Pelican. Theme: Elegant by Talha Mansoor