01揹包詳解

2021-07-25 09:08:12 字數 983 閱讀 9231

看了2天的01揹包,感覺現在真的是懂了,記錄一下,這樣才能記得更加深刻,其實早就接觸過01揹包,當時一知半解的,今天看了書本和別人的部落格,真的很有用:

1、  描述一下01揹包問題

有n個重量和價值分別為wi,vi,的物品,從這些物品中挑選出總重量不超過w的物品,求所有的挑選方案中價值總和的最大值。(這裡需要注意的問題每一件物品只有一件)。

2、   其實對於每乙個物品我們有2種選擇,那就是選擇與不選擇;所以我們可以按照dfs對每一種情況進行搜尋,這樣也是可以求出最後的結果(不知道是不是所有的dp問題都可以用遞迴的來解答,有待學習)

3、    下面主要是對dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);

進行講解,dp【i】【j】描述的什麼意思?當揹包的承重為j時,選擇的物品有1-i,能夠得到的最大值(這裡需要重點理解,一定要好好琢磨一下)。

4、     下面就是**:(我們看著**進行分析)

for(i=1;i<=n;++i)

{ for(j=0;j<=w;++j)

{ if(j

看著**我們會發現,其實是一種遞推關係dp【i】【j】,對於j的值,0-w,對每乙個j的值我們求出最大值,當然這是在i-1的基礎上求解的,就是這樣一直遞推下去;其實畫乙個二維表就很清楚了,如下:

n=4,w=5,(2,3),(1,2),(3,4),(2,2);以這個為例子進行畫表

這是按照**填寫的二維表,其實填了幾行你就會發現,i從1-4,每加入乙個物品,都要從i-1個物品中j從0-5去一一計算加入i物品的最大值,當然j的值也是從小到大0-5;

每次加入乙個物品都保證了j(0-5)的值中的最大值,也就是最優解,(可能表達的不好,具體自己畫一下二維表,強烈建議畫二維表),這個**還可以推廣到一維的形式,具體我會慢慢的講解。

0 1揹包(詳解)

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

詳解01揹包

假設有乙個小偷,他帶了乙個揹包想偷東西,這個揹包的容量capacity 8。他可以偷的物品一共有四個,每個物品都有自己的價值和重量,每個物品都可以選擇放或者不放 放就得到1個物品,不放就得到0個物品,因此得名0 1揹包 那麼,在揹包可承受的最大重量為8的前提下,如何選取要偷的物品,使得所偷物品的總價...

01揹包,完全揹包,多重揹包詳解

揹包之01揹包 完全揹包 多重揹包詳解 ps 大家覺得寫得還過得去,就幫我把部落格頂一下,謝謝。首先說下動態規劃,動態規劃這東西就和遞迴一樣,只能找區域性關係,若想全部列出來,是很難的,比如漢諾塔。你可以說先把除最後一層的其他所有層都移動到2,再把最後一層移動到3,最後再把其餘的從2移動到3,這是乙...