揹包恰好裝滿和不必裝滿的初始化區別

2022-03-22 19:06:36 字數 490 閱讀 1280

1.4 初始化的細節問題

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

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

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

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

01揹包的變形問題 揹包恰好裝滿

在看本文之前建議先看一下我之前發過的01揹包詳解。在前面講到的01揹包問題中,現在我們把條件改為 求當揹包恰好裝滿時候取得的最大價值 這樣的問題其實本質上和原始的01揹包問題區別不大,我們只需要做出一點小小的調整。需要指出的是該問題其實可分為兩個問題。1 揹包能否恰好裝滿?2 如果能恰好裝滿,恰好裝...

NYOJ 311 完全揹包(恰好裝滿)

時間限制 3500 ms 記憶體限制 65535 kb 難度 4描述 直接說題意,完全揹包定義 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包容量,且價值總和最大。本題要求是揹包 恰好裝滿揹包時,求出最大...

01揹包中揹包裝滿和不裝滿

揹包 有n 種不同的物品,每個物品有兩個屬性,v體積,c價值,現在給乙個體積為 m 的揹包,問 最多可帶走多少價值的物品。狀態轉移方程 dp i j max dp i 1 j dp i 1 j v i c i dp i 1 j 表示不放第i件物品的最大價值,dp i 1 j v i c i 表示放第...