背包問題(Knapsack problem)

可分割物品之解決方案:
下面是 "當物品可分割時之解決方案:
        假設某小偷帶了一個 2000 cc 的容器,準備要到某家酒店偷酒,下列是這家酒店內,可偷的酒價格與容量,每樣酒可以使用小塑膠袋盛裝,再放入容器,假設塑膠袋不暫空間,請問小偷要如何偷到總價值最高的酒? (容器可以不裝滿)(酒可以開瓶分裝)

酒名價格 ($)每瓶容量(cc)剩餘數量(瓶)
白蘭地Brandy
1380
300
2
葡萄酒 Wine
2800
700
2
威士忌 Whisky
1400
320
1
香檳Champagne
1800
500
5
台灣陳年高粱
600
600
20

此題因可分裝,所以可以開瓶分割內容物,因此先計算每種酒
每 cc 最高價值,再由最高者取捨。(見下表)

酒名價格 ($)每瓶容量(cc) 每cc價格 剩餘數量(瓶) 總 cc 數
白蘭地Brandy
1380
300
4.6
2
600
葡萄酒 Wine
2800
700
4
2
2800
威士忌 Whisky
1400
320
4.375
1
320
香檳Champagne
1800
500
3.6
5
2500
台灣陳年高粱
600
600
1
20
12000

最後結論:
白蘭地 (600cc) + 威士忌 (320cc) + 葡萄酒 (1080cc) = 2000cc
價值:
白蘭地 (4.6$ × 600cc) + 威士忌 (4.375$ × 320cc) + 葡萄酒 (4$ × 1080cc) = 8480$ (平均每 cc 4.2$)

由上可知,可分割物品,貪婪法就可解決,沒什麼高深學問可以討論。