PHP經典演算法之揹包問題

2022-06-09 20:00:17 字數 934 閱讀 8050

問題:假設有乙個揹包的負重最多可達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完全問題 問題可以描述為 給定一組物品,每種物品都有自己的重量和 在限定的總重量內,我們如何選擇,才能使得物品的總 最高。這個問題涉及到了兩個條件 一是物品總的大小小於或等於揹包的大小,二是物品總的價值要盡量大。如果我們 用子問題定義狀...