在0-1揹包問題中的f陣列初始化過程中,存在如下思考方式:
(1)若要求揹包必須放滿,則初始如下:
f[0] = 0 , f[1...v]表示-無窮。表示當容積為0時,只接受乙個容積為0的物品入包。
(2)若要求揹包可以空下,則初始化如下:
f[0...v] = 0 ,表示任意容積的揹包都有乙個有效解即為0。
具體解釋如下:
1.初始化的f陣列事實上就是在沒有任何物品可以放入揹包時的合法狀態。
【解釋】初始化的f陣列中的每個元素都相當於揹包在一定容量下的賦給揹包一定價值形成揹包最初狀態。比如如果f[i]是揹包的乙個合法狀態,表示當揹包容量為i時它的價值是f[i]。
2.如果要求揹包恰好裝滿,那麼此時只有容量為0的揹包可能被價值為0的nothing「恰好裝滿」,
【解釋】我們考慮揹包的f[i]表示的狀態和單個揹包裝入物品狀態的對應。恰好裝滿表示揹包當前容量儲存著和容量對應的物品。在i==0時,揹包容量為0,此時揹包合法價值f[i]==0(沒有物品)。i>0時,f[i]表示揹包已經裝入i容量物品的總價值。由於在不同問題中,以及同一問題的不同過程中,物品價值和容量的關係無法對應, 因此其他容量的揹包沒有合法的解。
3.其它容量的揹包均沒有合法的解,屬於未定義的狀態,它們的值就都應該是-∞了。
【解釋】動態規劃求最優解的過程需要保證狀態改變之前和改變之後的狀態均合法。並且在求最優解的過程中, 當前狀態最優的乙個重要基礎是狀態改變之前的狀態也達到最優。因此,在要求揹包「恰好裝滿」的前提下,i>0的狀態屬於未定義狀態,需要通過i=0這個合法狀態求解.
4.如果揹包並非必須被裝滿,那麼任何容量的揹包都有乙個合法解「什麼都不裝」,這個解的價值為0,所以初始時狀態的值也就全部為0了。
【解釋】在物品價值和容量無法確定關係的前提下。一定容量的揹包除了0價值之外的任意價值狀態都是非法的。此時任何容量的揹包都有乙個合法解就是f[i]==0。
關於揹包問題的研究
我們先從經典的0 1揹包談起,顯然這是乙個動態規劃。這個過程 商量 的問題是遇到乙個物品到底放還是不放呢?每種物品僅有一件,可以選擇放或不放。它的商量方程就是 m i j max m i 1 j m i 1 j w i v i 其中m i j 表示還有i個物品供選擇,揹包容量為j。ac 二維dp f...
關於01揹包問題
關於偉大的dp,入門便是從揹包問題開始,沒錯,揹包分為01揹包,完全揹包,多重揹包等。眾所周知完全揹包便是01揹包的反向思想,那麼什麼是01揹包?沒錯01揹包,顧名思義0和1 廢話 就是選 1 和不選 0 有一大堆東西 n件 有價值 v 有重量 w 有乙個承重 v 的揹包,嗯沒錯,跟貪心差不多,求可...
完全揹包問題思考與學習
完全揹包問題 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。關鍵是無限件數 include include include define maxn 100 int main ...