01揹包問題的理解

2021-09-30 06:40:34 字數 420 閱讀 2319

01揹包是: 

n個物品重量和價值分別為w[i],v[i],揹包可以容納的重量為weight,怎麼裝下最大價值的物品?

狀態轉移方程是: value(i, w) = max(value(i-1,w-w[i])+v[i], value(i-1,w))

要求w的解,那麼先求w-w[i]的解,w-w[i]的值只有在知道了i是多少時才知道,所以必須從第n個物品開始,而不是從第乙個物品開始,是個遞迴的過程,譬如:

但如果w[i]和weight是整數,那麼w-w[i]肯定是在0...weight之間的整數,此時就沒必要從第n個物品開始了,可以從第1個物品開 始,先直接求出w=0的解,然後再迭代求1的解,再求2的解。。。直至求weight的解,然後加入第二個物品,求從w=0,1,2..weight的 解,...直至第n個物品。

譬如(優化了空間複雜度):

揹包01問題初理解

揹包問題 knapsack problem 是一種組合優化的np完全問題。問題可以描述為 給定一組物品,每種物品都有自己的重量和 在限定的總重量內,我們如何選擇,才能使得物品的總 最高。問題的名稱 於如何選擇最合適的物品放置於給定揹包中。具體理解可以直接通過下面的例子來理解揹包問題 揹包問題的乙個例...

01揹包問題深度理解

有n件物品和乙個容量為v的揹包,求可以得到的最大價值。其中重量是w i 價值是v i 例 4 5 1 22 3 3 42 2 01揹包問題的常用的f v max f v f v w i v i 的解法是由樹遞迴得來的,這裡從頭推演一遍。我們可以這樣理解,從第乙個物品開始,每個物品都有兩種情況 選或不...

對0 1揹包問題的理解

首先宣告的是這是一篇非常非常基礎的對0 1揹包問題的理解。這兩天看了動態規劃初步,看到了0 1揹包問題。看到這裡的時候感覺理解有點困難。問題簡介 有乙個體積為c的揹包,要往裡面裝n中物品,第i種物品的體積為vi,質量為wi,求出揹包裡面最多能裝下多重的物品。劉汝佳對這個問題的分析是引用了前面的回朔法...