揹包基礎小結

2022-04-28 19:30:10 字數 1882 閱讀 1150

揹包學得太差了要好好複習總結一下 : )

## $01$/完全 揹包

揹包問題:有一些物品,每個物品有花費和價值,一般來說求的是在花費不超過給定數的前提下求最大的價值.

一般來說會省略第一維,但是在一些問題轉化成的揹包問題中不要忘了這一維可能又會被利用起來.

//01揹包 v表示花費 w表示價值

go(i,1,n)

yes(j,t,a[i].v)

f[j]=max(f[j],f[j-a[i].v]+a[i].w);

//完全揹包

go(i,1,n)

go(j,a[i].v,t)

f[j]=max(f[j],f[j-a[i].v]+a[i].w);

## 多重揹包

每種物品有$d_i$件.

1.暴力拆分.

​ 將物品拆成\(\sum d_i\)件,然後跑\(01\)揹包.

2.二進位制拆分.

​ 將物品拆成\(\sum log\ d_i\)件,然後跑\(01\)揹包.

3.單調佇列優化.

​ 我又忘了\(.jpg\),而且發現沒有好好講過單調佇列優化多重揹包,所以這裡詳細講下叭.

​ 發現\(f_\)一定是從\(f_\)轉移而來,\(f_\)一定從\(f_\)轉移而來,這兩者的候選集合並不重合,也就是說當\(i\)確定時,它們兩個是不互相影響的.

​ 考慮將\(j\)按照除以\(v_i\)的餘數分個類,一類裡的某個狀態\(j\)的候選答案集合一定也是屬於該狀態,所以我們依次在每一類裡從小到大地求\(f_j\).

​ 具體來說,我們把列舉\(j\)的一層變成先列舉餘數\(u\),再從小列舉\(j\%v_i=u\)的\(j\),其實這裡只要列舉乙個\(p\in[1,(m-u)/v_i]\),這樣列舉得到的狀態\(j\)就是\(p\cdot v_i+u\).

​ 轉移:\(f_=max_\+(p-k)\cdot w_i\}\)

​ 將外層迴圈\(i,u\)看成定值,只要維護乙個隨著\(k\)的減小,\(f_-k\cdot w_i\)遞減的單調佇列就可以了.

il int calc(ri k,ri i,ri u)

go(i,1,n)

yes(p,mx,1)

while(l<=r && q[l]>p-1)++l;

if(l<=r)f[p*v+u]=max(f[p*v+u],calc(q[l],i,u)+p*w);

}}}

## 樹形揹包/有依賴的揹包問題

例題:洛谷$1024$ 選課.

大致思路就是,對每個子樹都\(dp\)一遍,將答案集中要子樹的根結點,層層解決.具體來說,設\(f_\)表示在以\(i\)為根的子樹內選擇了\(j\)個物品的最大價值(這裡規定物品的體積都為\(1\)),轉移的話就直接枚舉子結點\(k\)用\(f_\)轉移即可,注意列舉順序是\(01\)揹包的列舉順序.

## 揹包方案計數

$01$揹包計數,例題:洛谷$1164$ 小$a$點菜.

設\(f_\)為前\(i\)個物品,選了的物品的體積總和為\(j\)的方案數.轉移考慮能不能和選不選當前的物品就行.顯然是可以省略掉第一維的,並且省略之後轉移更簡單一些.

完全揹包改下列舉順序就可以了叭.

## 習題

**希望有神仙可以推薦揹包題!!就稍微有點繞的一看看不出是揹包的那種就行!!**

考慮刪掉一種貨幣的條件是它能被其他貨幣表示出來,設\(f_i\)表示數\(i\)能否被表示出來,完全揹包一下,\(over\).

一道完全揹包和\(01\)揹包的混合題\(qwq\).設\(f_\)表示到達位置\(i\),高度為\(j\)所需的最小點選數目.似乎細節很多,雖然去年寫過不過還是打算再寫一遍\(qwq\).但我現在暫時不想寫了\(qwq\).

揹包問題小結

這個周好好總結了揹包問題,下面簡單總結一下揹包問題,也方便以後忘了可以來複習 揹包問題最基礎的就是01揹包,其他的揹包問題都可以通過新增各種附加條件這樣的方式轉化為01揹包。01揹包就按字面意思來理解,每個物品只有一件,0是false1是true就是這件物品裝還是不裝,做出選擇,根據這個選擇我們也可...

揹包問題小結

學演算法的時候,揹包問題是乙個很常見的動態規劃問題,像什麼01揹包 完全揹包 多重揹包等,當時學的時候就有一些懵懵懂懂的,現在複習的時候又不會了,所以進行總結一下,方便日後檢視學習。問題基本上都是lintcode上面的題目,然後在github上還找到乙個專門講揹包問題的倉庫 樣例 1 輸入 3,4,...

樹形揹包小結

已知 2 1 種做法 分別是 link bzoj2427 int sta n dfn n low n w n val n dp n 505 n,m,top,w n v n fa n l n cnt n siz n bel n idx vint g n bitsetins,vis void tarja...