揹包問題總結

2022-06-20 13:51:17 字數 946 閱讀 7523

揹包問題是一大類問題。

我們不妨設有\(n\)個物品,揹包容量為\(m\),每個物品大小為\(c\),個數為\(d\),價值為\(w\)。

大寫字母表示求和。

01揹包,完全揹包,分組揹包:直接dp即可。時間複雜度\(o(nm)\)。

多重揹包:單調佇列優化或二進位制拆分。\(o(nm)\)或\(o(nmlogd)\)。列舉餘數進行單調佇列。

樹形揹包:選擇父親才能選擇兒子。

樹形dp或者dfs序列上dp。建議後者。\(o(nm)\)。

超大揹包:體積很大,價值很小。

按照價值dp即可。dp(i,j)表示考慮到i,價值為j,最小體積。\(o(n^2w)\),即\(o(nw)\)。

價值體積都很大的揹包:中途相遇法。\(o(2^})\)。

01揹包,\(n,m\)都比較大,但\(c\)很小:

把物品按照\(c\)整理。

按照c去依次計算,設\(f(x,i)\)表示考慮到體積為\(x\)的物品,容量為\(i\)。

對於模\(x\)意義下相等的數,從小到大滿足決策單調性,使用分治,可以把複雜度降低至\(o(nlogn+mclogm)\)。

分數揹包:直接按照\(\frac\)排序,貪心選擇。\(o(nlogn)\)。『

超多揹包:\(m,d\)都很大。只有\(w\)比較小。

考慮分數揹包的貪心做法,但這個顯然是錯誤的。

不過可以發現,只有對於每個物品的零散部分才可能出錯。

把每個物品拆分為兩個部分:小於等於\(w\)的部分。大於\(w\)的部分。

後者直接貪心即可。前者使用「超大揹包」和單調佇列優化即可。\(o(n^2w^2)\)。

還有幾種不屬於揹包問題,但是差不多的問題。

完全揹包計數:參見此題。

沒有容量,只有價值或者代價,同時選擇有額外價值的揹包:

考慮文理分科模型,或者某種最小割。

沒了。希望自己情感事業一帆風順。

揹包問題 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件裡面挑選一些放到乙個容量一定的揹包裡面,使得你的揹包裡的東西總價值最大。對於這些東西的每一件,你可以選擇放進你...