回溯演算法之購物車 0 1 揹包問題

2021-08-19 19:03:58 字數 631 閱讀 4912

央視有乙個大型娛樂節目— 購物街,舞台上模擬超市大賣場,有很多貨物,每個嘉賓分配乙個購物車,可以盡情的裝滿購物車,購物車裝的價值最高者取勝。假設 n 個物品和 1個購物車,每個物品 i 對應價值為 v

i,重量 w

i,購物車的容量為 w(你也可以將重量設定為體積)。每個物品只有一件,要麼裝入,要麼不裝入,不可拆分。如何選取物品裝入購物車,使購物車所裝入的物品的總價值最大?要求輸出最優值(裝入的最大價值)和最優解(裝入了哪些物品)。 

從 n 個物品中選擇一些物品,相當於從 n 個物品組成的集合 s 中找到乙個子集,這個子集內所有物品的總重量不超過購物車容量,並且這些物品的總價值最大。s 的所有的子集都是問題的可能解,這些可能解組成了解空間,我們在解空間中找總重量不超過購物車容量且價值最大的物品集作為最優解 

1)、演算法設計

(1)定義問題的解空間

購物車問題屬於典型的 0-1 揹包問題,問題的解是從 n 個物品中選擇一些物品使其在不

超過容量的情況下價值最大。每個物品有且只有兩種狀態,要麼裝入購物車,要不不裝入。那麼第 i 個物品裝入購物車,能夠達到目標要求,還是不裝入購物車能夠達到目標要求呢?很顯然,目前還不確定。因此,可以用變數 x

i 表示第 i 種物品是否被裝入購物車的行

回溯 0 1揹包 大賣場購物車

題目 一輛購物車容量為w,總共有n個物品,第i個物品對應價值vi,重量wi,不可拆分,如何選取物品使購物車裝入物品價值最大。解題思路 本題很直觀的用貪心解決比較簡單,但這藉此寫一下回溯演算法。include includeusing namespace std define m 105 int i,...

回溯演算法 0 1揹包問題

給定乙個物品集合s 1,2,3,n 物品i的重量是wi,其價值是vi,揹包的容量為w,即最大載重量不超過w。在限定的總重量w內,我們如何選擇物品,才能使得物品的總價值最大。0 1揹包問題回溯演算法的資料結構 define num 100 int c 揹包的容量 int n 物品的數量 int cw ...

回溯演算法 01揹包問題

假期 2020.01 200 1揹包問題一般描述為 給定n種物品和乙個揹包。物品i的重量是w i 其價值為v i 揹包的容量為c。問應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?注 每個物品只能使用一次。這次分析01揹包問題,採用回溯的方法實現。簡單的來說,回溯就是採用dfs然後加上...