揹包問題總結

2021-10-03 20:18:58 字數 626 閱讀 4272

三.分組揹包

for

(分組i)

}}

題目

有nnn種物品和乙個容量為vvv的揹包。第iii種物品最多有p[i]p[i]p[i]件可用,每件費用是w[i]w[i]w[i],價值是v[i]v[i]v[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

基本演算法

這題目和完全揹包問題很類似。基本的方程只需將完全揹包問題的方程略微一改即可,因為對於第iii種物品有表示前i種物品恰放入乙個容量為jjj的揹包的最大權值,則有狀態轉移方程:

f[i][j]=max(f[i−1][j−k∗w[i]]+k∗v[i])∣0<=k<=p[i]
優化

將第i件物品分堆,每堆分成20,21…2k-1,p[i] - 2k +1件物品。這樣就可以將原本p[i]件物品轉化成log2(p[i])件物品時間複雜度為o(vlogσlog(p[i])),減少了複雜度。

其中(1 + 2 +…2k-1) = 2k - 1,就是讓分成物品的件數和等於p[i]

模板**

for

(int i =

0; i < n; i++)}

}

揹包問題 01揹包總結

寫這篇部落格的原因是因為自己初學揹包的時候覺得好玄學。只是知道怎麼寫,但是具體是為什麼覺得很玄妙。在此其實希望和我一樣的小白萌新早點明白其中的原理,其實原理很簡單,只要懂了這個圖,我想01揹包就不成問題了。首先要明確這張表是至底向上,從左到右生成的。關於01揹包的題目暫時整理了一點。1.簡單01揹包...

揹包問題總結

標籤 acm dp 揹包 n 物品,乙個揹包,每個物品價值wi 體積vi 揹包容量 c 求最大價值 對於物品 i可選可不選 fi j fi 1 j vi j 0 fi j max c j vi 給定 n 種物品和乙個揹包。第 i種物品的價值是 wi 其體積為vi 揹包的容量為 c 同一種物品的數量無...

揹包問題總結

揹包問題主要是分為三種 0 1揹包,完全揹包,多重揹包 1 0 1揹包 定義 何謂0 1揹包,可以這樣想,那裡有一堆值錢的東西,每一樣東西只有一件,他們的價值和體積都不一樣,現在要你從這n件裡面挑選一些放到乙個容量一定的揹包裡面,使得你的揹包裡的東西總價值最大。對於這些東西的每一件,你可以選擇放進你...