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

2021-10-06 19:30:15 字數 511 閱讀 2579

在揹包九講中,作者提到過

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時,此時根據轉移公式,dp[v]=max(dp[v],dp[v-cn]+wn),其他的

dp[0~ v-cn]是不需要的,所以不需要再轉移了。

由此倒推,當i=n-1時,需要計算dp[v-cn],而根據轉移方程可知:

dp[v-cn]=max(dp[v-cn],dp[v-cn-cn-1]+wn-1),所以只要計算[v-cn-cn-1 ~ v]就可以了,也即v-sum(ci ~ cn)

以此類推,可得v在轉移過程中的下限是max(v -sum(ci ~ cn), ci);

01揹包的常數優化的一點解釋

01揹包的常數優化的一點解釋 for i 1 to n for v v to max v key,ci 其中 key sum nv j 注意到在空間優化後,內層迴圈已經變成逆序的了。也就是說,在給定物品i的時候,假設 v v 那麼 dp v 總是會先 dp v 更新,dp v 被更新了的話,dp v...

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

第一部分 01揹包初步理解 剛開始學01揹包一頭霧水,聽不明白,但慢慢的隨著查資料,刷題,逐漸得到了一些關鍵的知識點,才有點頓開的感覺。1 動態方程 dp i j max dp i 1 j w i c i dp i 1 j 我逐漸理解到這個方程為什麼要這麼寫是從j w i 開始的。2 j代表揹包容積...

01揹包問題的理解

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是多少時才知道...