1.矩陣鏈乘法
2.投資組合問題
3.完全揹包問題
4.01揹包問題
5.最長公共子串行
乙個揹包,可以放入n種物品,物品j的重量和價值分別為,如果揹包的最大重量限制是b,怎麼樣選擇放入揹包的物品以使得揹包的總價值最大?
組合優化問題,設表示裝入揹包的第j個物品的數量,解可以表示為。那麼目標函式和約束條件是:
如果組合優化問題的目標函式和約束條件都是線性函式,稱為線性規劃。如果線性規劃問題的變數都是非負整數,則稱為整數規劃問題。揹包問題就是整數規劃問題。限制所有的時稱為0-1揹包
子問題的界定(就是靠什麼來劃分子問題):由引數k和y界定
k:考慮對物品1,2,3,...,k的選擇。
y:表示揹包總重
子問題計算順序:k=1,2,...,k,對給定的k,y=1,2,...,b
:裝前k個物品,重量不超過y時的揹包最大值。
包含兩種情況:不裝第k種物品或至少裝一件第k種物品。
對的解釋:裝一件第k種物品後,最優的解法仍然是在前k個物品進行選擇,仍有可能再選入1件第k種物品。
對邊界條件:
:即只用第一種物品揹包重量限制為y的最大價值,為了保證揹包不超重,第一種物品至多能裝個,因為揹包價值為
有些那麼通過設定為負無窮,在選擇過程中拋棄掉為負的情況。
標記函式:用來追蹤解
按照遞推公式:以k=2為例子,簡單演算如下:
依次類推,可得備忘錄表:
備忘錄表
標記函式的備忘錄:
標記函式表
物品受限揹包:第i種物品最多用個
0-1揹包問題:
多揹包:m個揹包,揹包裝入最大重量在滿足所有揹包重量約束下使物品價值最大。
二維揹包:每件物品重量和體積,揹包總重不超過b,體積不超過v,使得物品價值最大。
此問題是完全揹包問題,即 乙個物品可重複出現。
public class knapsackproblem ;
int v = ;
mem = new int[n+1][d+1];
s = new int[n+1][d+1];
// 預設初始化為0
int max_value = completely_backpack(w,v,n,d);
system.out.printf("揹包最大值為:%d\n",max_value);
system.out.printf("備忘錄表為:\n");
for (int i = 0; i < n + 1; i++)
system.out.println();
}system.out.println("標記函式表尾:");
for (int i = 0; i < n + 1; i++)
system.out.println();
}// 追蹤解 且 初始化為 0
int res = new int[n+1];
tracesolution(res,n,d,w);
system.out.println("揹包裝入各個物品的數量為:");
for (int i = 1; i < n + 1; i++)
}public static int completely_backpack(int w,int v,int n,int d)(y), f_k(y-w_k)+v_k }
// i表示 前i個 物品放入揹包
for (int i = 1; i <= n; i++)
else in = mem[i][j-w[i-1]] + v[i-1];
mem[i][j] = math.max(not,in);
// 根據標記函式的定義來寫
if (not > in)
else}}
return mem[n][d];
}public static void tracesolution(int res,int n,int d,int w)
i = s[i][y];}}
}
揹包問題(0 1揹包 完全揹包)
0 1揹包 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。重要的點在於 每種物品僅有一件,可以選擇放 不放子問題 f i v 表示前i件物品恰好放入乙個 容量為v 的揹包可以獲得的最大價值。狀態轉移方程 遞推式 f i v max 考...
揹包問題 01揹包 完全揹包 多重揹包
01揹包和完全揹包的區別 01揹包的侷限在於每樣物品只有一種,每個物品都有乙個屬於自己的價值和重量,在給定的物品中選出揹包所能容納的最大重量,要求是價值最大 完全揹包與01揹包的不同在於完全揹包不限制每樣物品的個數,物品的價值和質量都與01揹包一樣,也同樣是求在給定大小的容量中,找出最大價值的選擇 ...
揹包問題(01揹包,完全揹包,多重揹包)
揹包問題 01揹包,完全揹包,多重揹包 近日為以下瑣事煩身 差不多要向學院提交專案申請了,本來是想做個多模式的im系統的,可是跟往屆通過審核的專案比起來,缺乏創新和研究價值,所以在文件上要多做手腳,花點心思。揹包問題,經典有揹包九講。不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張...