01揹包初始化要點

2022-08-18 03:27:14 字數 593 閱讀 9004

我們看到的求最優解的揹包問題題目中,事實上有兩種不太相同的問法。有的題目要求「恰好裝滿揹包」時的最優解,有的題目則並沒有要求必須把揹包裝滿。一種區別這兩種問法的實現方法是在初始化的時候有所不同。

如果是第一種問法,要求恰好裝滿揹包,那麼在初始化時除了f[0]為0其它f[1..v]均設為-∞,這樣就可以保證最終得到的f[n]是一種恰好裝滿揹包的最優解。

如果並沒有要求必須把揹包裝滿,而是只希望**盡量大,初始化時應該將f[0..v]全部設為0。

為什麼呢?可以這樣理解:初始化的f陣列事實上就是在沒有任何物品可以放入揹包時的合法狀態。如果要求揹包恰好裝滿,那麼此時只有容量為0的揹包可能被價值為0的nothing「恰好裝滿」,其它容量的揹包均沒有合法的解,屬於未定義的狀態,它們的值就都應該是-∞了。如果揹包並非必須被裝滿,那麼任何容量的揹包都有乙個合法解「什麼都不裝」,這個解的價值為0,所以初始時狀態的值也就全部為0了。

恰好裝滿揹包:  恰好裝滿揹包,那麼在初始化時除了f[0]為0其它f[1..v]均設為-∞,這樣就可以保證最終得到的f[n]是一種恰好裝滿揹包的最優解。

沒有要求必須把揹包裝滿:  如果並沒有要求必須把揹包裝滿,而是只希望**盡量大,初始化時應該將f[0..v]全部設為0。

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

下面是本蒟蒻的一些個人理解,請見諒 眾所周知,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 ...

揹包問題 初始化

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

揹包問題初始化細節

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