關於0 1揹包初始化的理解

2021-10-19 02:54:42 字數 950 閱讀 7669

下面是本蒟蒻的一些個人理解,請見諒

眾所周知,01揹包有兩種初始化形式:

初始化為0,f[j

]f[j]

f[j]

表示不要求裝滿時揹包容積為j

jj的最大價值;

f [0

]f[0]

f[0]

初始化為0,f[1

−n

]f[1-n]

f[1−n]

初始化為−

∞- \infty

−∞,f [j

]f[j]

f[j]

表示恰好裝滿時揹包容積為j

jj的最大價值。

這是為什麼呢?

原理很簡單,此處,方法2中的−

∞- \infty

−∞可以理解為沒有滿足條件(即恰好裝滿)的最優解。

由於01揹包狀態轉移公式:

/*

n 物品數

m 揹包容積

v[i] 第i個物品的體積

w[i] 第i個物品的價值

f 狀態

*/for

(int i=

1;i<=n;i++

)for

(int j=m;j>=v[i]

;j--

) f[j]

=max

(f[j]

,f[j-v[i]

]+w[i]);

//狀態轉移方程

若一定要求裝滿:

for

(int j=

0;j<=m;j++

) ans=

max(ans,f[j]);

//因為不一定裝滿m

反之,同理,不要求裝滿即可賦初值為0,

直接輸出答案為f[m]

01揹包初始化要點

我們看到的求最優解的揹包問題題目中,事實上有兩種不太相同的問法。有的題目要求 恰好裝滿揹包 時的最優解,有的題目則並沒有要求必須把揹包裝滿。一種區別這兩種問法的實現方法是在初始化的時候有所不同。如果是第一種問法,要求恰好裝滿揹包,那麼在初始化時除了f 0 為0其它f 1.v 均設為 這樣就可以保證最...

揹包問題 初始化

初始化的細節問題 我們看到的求最優解的揹包問題題目中,事實上有兩種不太相同的問法。有的題目要求 恰好裝滿揹包 時的最優解,有的題目則並沒有要求必須把揹包裝滿。一種區別這兩種問法的實現方法是在初始化的時候有所不同。如果是第一種問法,要求恰好裝滿揹包,那麼在初始化時除了f 0 為0,其它f 1 v 均設...

01揹包的兩種初始化問題

前段時間看dp中的01揹包問題,大部分內容都好理解,網上也有很多關於這個問題的部落格,但自己提出的問題沒有得到解決,只好苦思冥想,以求進一步理解。首先是問題描述 給定n種物品和一揹包,物品i的重量是wi,其價值是pi,揹包的容量是m,問如何選 擇裝入揹包中的物品 總價值最大?這裡有兩種情況一種是將揹...