背包问题

来源:互联网 发布:数据采集器 编辑:程序博客网 时间:2024/05/21 11:33

    有N件物品和一个最大载重为W的背包。第i件物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。这是最基础的背包问题,每种物品仅有一件,可以选择放或不放。


定义状态:即V[i][W]表示前i件物品恰放入一个容量为W的背包可以获得的最大价值。

则其状态转移方程便是:

V[i][W]=max(V[i-1][W], V[i-1][W-w[i]]+v[i])。

这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。
具体思路"将前i件物品放入最大载重为W的背包中"这个子问题,考虑第i件物品只有两种情况放与不放,那么就可以转化为一个只牵扯前i-1件物品的问题。


两种情况


1.不放第i件物品,那么问题就转化为"前i-1件物品放入容量为W的背包中",价值为V[i-1][W];

2.放第i件物品,那么问题就转化为"前i-1件物品放入剩下的容量为W-w[i]的背包中",此时能获得的最大价值就是V[i-1][W-w[i]]再加上通过放入第i件物品获得的价值v[i]。
2 0
原创粉丝点击