0 1揹包問題的變種

2021-09-16 23:22:51 字數 978 閱讀 3571

最簡單的思路是,由於物品是可以無限使用的,但是揹包的容量是有限的,所以,其實每個物品可以取到的數量是有最大值的。換句話說,可以將這個可以無限使用的物品的揹包問題,轉換成乙個有限使用的物品的揹包問題,只不過此時在選取的物品列表中,很多物品是重複的。只此而已,這是乙個解決思路。更進一步,其實可以優化這個方案,這是因為,對於任意乙個數字而言,都可以通過乙個二進位製碼來表示,所以,對於這種同樣的物品不一定向物品列表中新增1、1、1、1、1這樣的序列,只需要新增1、2、4、8、16這樣的序列就可以表示同乙個物品取了多少個放進揹包裡。當揹包容積非常大的時候,這是乙個很好的優化思路。

介於每個物品只有1個這樣的限制,和完全揹包中每個物品可以無限地使用這個限制之間,就可以設計出一種多重揹包問題。換句話說,對每個物品新增了乙個約束,這個約束是每個物品有num[i]個,求解這樣的問題。其實理解了完全揹包的解決方案,多重揹包問題是更加簡單的。

多維費用的揹包問題,前面介紹的揹包問題,都只考慮c這乙個揹包限制,那麼,假設每個物品都有體積和重量兩個維度,與此同時,揹包本身也有最大的體積和最大的重量的限制,要同時滿足這兩個侷限的話,該怎麼解決?其實,只是在動態規劃過程中狀態多了乙個引數,相應地記錄的這個動態規劃的陣列是乙個三維陣列。

比如說,現在要向背包中放入很多物品,在揹包中放入某些物品後就不能再放入其它的物品了,這就是物品間排斥的約束。另外一種情況就是,放入某些物品,也必須把另外一些物品也放入進去。這就是物品之間互相依賴的約束。

0 1揹包問題及變種

0 1揹包問題 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。這個問題的特點是 每種物品只有一件,可以選擇放或者不放。演算法基本思想 利用動態規劃思想 子問題為 f i v 表示前i件物品恰放入乙個...

變種 揹包問題 演算法設計 揹包問題

題目 乙個旅行者準備隨身攜帶乙個揹包,可以放入揹包的物品有n種,每種物品的重量和價值分別為wj,vj 如果揹包的最大重量限制是b,怎樣選擇放入揹包的物品以使得揹包的價值最大?目標函式 約束條件 演算法設計 設fk y 表示只允許裝前k 種物品,揹包總重不超過y 時揹包的最大價值。fk y 有兩種情況...

變種的01揹包,POJ 2184

題意 這是又是一道01揹包的變體,題目要求選出一些牛,使smartness和funness值的和最大,而這些牛有些smartness或funness的值是負的,還要求最終的smartness之和以及funness之和不能為負。自己想不出來,這裡值得借鑑的就是把其中乙個東西當做費用,另乙個當做價值,這...