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