0 1揹包問題 以 動態規劃演算法 去解

2021-08-02 18:11:33 字數 1091 閱讀 5101

0/1揹包問題 - 以 動態規劃演算法 去解

flyfish

0/1揹包問題(0/1 knapsack problem)

我們有n種物品,編號是 0,1,2,3…,n-1,物品i的重量(weight)為wi,價值(value) 為vi。

我們假定所有物品的重量和**都是非負的。

揹包所能承受的最大重量(maximum weight capacity)為c。

限定每種物品只能選擇0個或1個。

目的是得到動態規劃的狀態轉移方程

物品個數n為4

承受的最大重量c=10

重量分別是 3, 5, 4, 2 (編號0,1,2,3)(編號也就是0,1,2,n-1)

價值分別是 30,20,10,40

最大價值是90(取編號0,1,3)

items=, , ,

當n=4時,求的是4個物品, 裝入重量為10的揹包裡能達到的最大價值

n=4 c=10

w =3, 5, 4, 2

v =30,20,10,40

當把第3個物品(從0編號)去掉問題變成

當n=3時,求的是3個物品, 裝入剩餘重量為8(10-2) 的揹包裡能達到的最大價值

n=3 c=8

w =3, 5, 4

v =30,20,10

最大價值是50(取編號0,1)

n個物品 (0,1,2…,n-1)裝到剩餘容量為c的揹包中的最大價值

假設函式f表示最大價值

裝入 f(4,10)=f(3,10-2)+40

=f(3,8 )+40

不裝入

f(4, 10)=f(3, 10)

結果是

f(4,10)=max 裝入與不裝入 取最大值

n=1,2,3 表示任意其中乙個定義為i,

表示任意乙個重量定義為j

f(i, j)表示乙個狀態,下面就是狀態轉移方程

f(i, j)=max

這個式子就是wiki第三個式子,只是字母不同

01揹包問題 (動態規劃演算法)

0 1 揹包問題 給定 n 種物品和乙個容量為 c 的揹包,物品 i 的重量是 wi,其價值為 vi 問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?分析一波 面對每個物品,我們只有選擇拿取或者不拿兩種選擇,不能選擇裝入某物品的一部分,也不能裝入同一物品多次。解決辦法 宣告乙個 大...

01揹包問題 (動態規劃演算法)

題目 給定n種物品和乙個容量為v的揹包,物品i的體積是wi,其價值為ci。每種物品只有乙個 問 如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?面對每個物品,我們只有選擇放入或者不放入兩種選擇,每種物品只能放入一次。我們用之前同樣的思路來走一遍試試 假設只剩下最後一件物品,我們有兩種選擇 ...

動態規劃演算法 01揹包問題

動態規劃演算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每乙個解都對應於乙個值,我們希望找到具有最優值的解。動態規劃演算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解。與分治法不同的是,適合於用動態規劃求解的...