01揹包初步理解,及其優化

2021-09-07 05:31:28 字數 674 閱讀 3168

``第一部分:01揹包初步理解

剛開始學01揹包一頭霧水,聽不明白,但慢慢的隨著查資料,刷題,逐漸得到了一些關鍵的知識點,才有點頓開的感覺。

1:動態方程 dp[i][j]=max(dp[i-1][j-w[i]]+c[i],dp[i-1][j]) 我逐漸理解到這個方程為什麼要這麼寫是從j-w[i]開始的。

2:j代表揹包容積,j-w[i]代表剩餘揹包容積,dp[i][j]=max(dp[i-1][j-w[i]]+c[i],dp[i-1][j]),這個方程是建立在j>=w[i]的基礎上的,如果j=w[i]的地方根據max()函式來判斷是否要保持原狀態

}第二部分:將二維陣列優化維一維數值

/理解上面的就好理解下面的了/

dp找的是前乙個狀態,二維陣列剛好可以將前乙個狀態表現在dp[i-1[j]中,但這樣用了二維陣列對空間就不太節約了,所以我們要優化成一維陣列所以就需要將前乙個狀態弄到一維陣列中即找沒有更新的狀態,所以我們可以逆序來找

/也就是說將j=n揹包容量從最大開始找向前找狀態,前面的狀態都還沒有更新所以所以就可以繼續用一維陣列每次都在一維陣列中找到前乙個狀態。而如果是按遞增的順序去的化每次j-w[i]都是找到了更新後的狀態,我們要找的上乙個狀態,而不是更新後的狀態/

看下**:

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

}

01揹包及其優化

動態規劃是解決變成問題的一種重要思想,而揹包則是動態規劃的一種。揹包問題 給你乙個容量為v的揹包以及一些具有價值wi和體積vi的一些物品,要你求出揹包所能裝的最大價值。解決方法 定義乙個陣列f i v 用來統計各種情況下,揹包所能裝的最大價值,其中,i代表當前只提供前i個物品給你選擇,v表示當前只提...

關於0 1揹包的常數優化的理解

在揹包九講中,作者提到過 for i 1 to n for v v to ci中第二重迴圈的下限可以改進。它可以被優化為 for i 1 to n for v v to max v sum ci cn ci 可以這樣理解 我們需要的最終結果是dp v 當dp v 最後一次更新實在i n時,此時根據轉...

01揹包 優化之前,之後

塗奧最近迷上了吃雞,房間有n個配件,每個配件有c c 1e3 的重量和v v 1e3 的價值,哇,塗奧撿了乙個2級包,容量為s,所以塗奧最多當多肥的快遞員呢?input 輸入的第一行是t,表示有一共要打t場比賽.每組資料由三行組成.第1行包含兩個整數n和s 第2行包含n個整數,表示每乙個配件的價值....