問題:假設有乙個揹包的負重最多可達8公斤,而希望在揹包中裝入負重範圍內可得之總價物品,假設是水果好了,水果的編號、單價與重量如下所示:
1 栗子 4kg $4500
2 蘋果 5kg $5700
3 橘子 2kg $2250
4 士多啤梨 1kg $1100
5 甜瓜 6kg $6700
分析:揹包問題是關於最佳化的問題,要解最佳化問題可以使用「動態規劃」(dynamic programming),從空集合開始,每增加乙個元素就先求出該階段的最佳解,直到所有的元素加入至集合中,最後得到的就是最佳解。
//揹包承重上限
$limit = 8;
//物品種類
$total = 5;
//物品
$array = array(
array("栗子", 4, 4500),
array("蘋果", 5, 5700),
array("橘子", 2, 2250),
array("士多啤梨", 1, 1100),
array("甜瓜", 6, 6700)
);//存放物品的陣列
$item = array_fill(0, $limit + 1, 0);
//存放價值的陣列
$value = array_fill(0, $limit + 1, 0);
$p = $newvalue = 0;
for ($i = 0; $i < $total; $i++)
}}echo "物品 **
";for ($i = $limit; 1 <= $i; $i = $i - $array[$item[$i]][1])
echo "合計 " .
經典演算法之 揹包問題
問題描述 有乙個揹包容量為m,一堆物品其重量表示為w 物品相應的價值v 現在要求將物品中的一部分或全部,放入揹包。要求 裝入物品的總價值最高 同時滿足裝入物品總重量不超過m 對單個物品而言,狀態可為 裝入揹包 不裝入揹包 一部分裝入揹包。假設裝入的物品為從w i 到w j 則有 對於完全揹包而言,我...
經典演算法問題 0 1 揹包
一 問題描述 有n 個物品,它們有各自的重量和價值,現有給定容量的揹包,如何讓揹包裡裝入的物品具有最大的價值總和?二 問題分析 1 用v i 表示物品價值,w i 表示物品重量。定義狀態dp i j 以j為容量為放入前i個物品 按i從小到大的順序 的最大價值。2 初始化邊界條件,v 0,j v i,...
經典演算法詳解 之 揹包演算法
揹包問題 knapsackproblem 是一種組合優化的 np完全問題 問題可以描述為 給定一組物品,每種物品都有自己的重量和 在限定的總重量內,我們如何選擇,才能使得物品的總 最高。這個問題涉及到了兩個條件 一是物品總的大小小於或等於揹包的大小,二是物品總的價值要盡量大。如果我們 用子問題定義狀...