題目
有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的費用是c[i],價值是w[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
基本思路
這個問題十分類似01揹包,不同的是每種物品有無限件。也就是從每種物品的角度考慮,與它相關的策略已並非取或不取兩種,而是有取0件、取1件、取2件……等很多種。於是得:
f[i][v]=max 其中0<=k*c[i]<=v
仔細觀察,f[i][v-k*c[i]]正好是由以下狀態決定;那麼f[i][v]正好就是由f[i-1][v]和
f[i][v-k*c[i]]決定,這裡的k=1,也就成了f[i][v-c[i]];其意義為:若不選取第i種物品,當前最優結果f[i][v]顯然等於f[i-1][v];若選取第i種物品,則可由之前選取了若干個第i種物品的最優解再加乙個第i種物品得到。
於是狀態轉移方程:
f[i][v]=max
然後又和以前一樣,優化為一維陣列:
for i=1..n
for v=0..v
f[v]=max
你會發現這與01揹包的偽**差別只有v的迴圈次序不同而已,仔細想想就能理解為什麼。 揹包問題2(完全揹包)
問題的提出 有n種物品,乙個容量為v的揹包,每種物品可以無限的加入揹包,第i種物品的價值為v i 花費為w i 求將那些裝入揹包能讓價值最大且不超過揹包的容量?思路 該題類似於01揹包,唯一的不同就是所有的物品可以無限取,這樣從物品的角度考慮就會有多中方法,不像01中的取或不取 當然01揹包作為最基...
揹包問題2 完全揹包
一,題目 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的費用是c i 價值是w i 求解將哪些物品裝入 揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。二,基本思路 從每種物品的角度考慮,與它相關的策略已並非取或不取兩種,而是有取0件 取1件 取2件 等很多種。令f ...
揹包問題(完全揹包)
1.矩陣鏈乘法 2.投資組合問題 3.完全揹包問題 4.01揹包問題 5.最長公共子串行 乙個揹包,可以放入n種物品,物品j的重量和價值分別為,如果揹包的最大重量限制是b,怎麼樣選擇放入揹包的物品以使得揹包的總價值最大?組合優化問題,設表示裝入揹包的第j個物品的數量,解可以表示為。那麼目標函式和約束...