樹形依賴背包問題
每個點有個權值和體積,如果選了某個點那么它的父親也必須選,問體積和<=m的最大權值和。
如果體積都為1,那么直接做是$n^2$的。
否則是$nm^2$的。
我們考慮求出樹的后序遍歷,那么對於$i$這棵子樹,它在后序遍歷上是連續一段,並且$i$在最后。
考慮$i$選還是不選,如果選的話$f[i]$可以從$f[i-1]$轉移過來,否則直接從$f[i-size[i]]$copy過來。
復雜度$nm$,當然也適用於樹上的完全背包和多重背包。
例題:
4910: [Sdoi2017] 蘋果樹
樹形依賴多重背包,並且可以無視體積選某一條鏈上每個點一次。
貪心的選,這條鏈一定是以葉子結尾。
枚舉葉子,這條鏈把樹分成了兩部分,枚舉左邊選的體積,就能求出右邊的體積,更新答案,復雜度$nm$。
我們現在需要知道對於這條鏈左邊和右邊選體積為$k$的最大權值,這個其實就是正反(遍歷子樹的順序相反)后序遍歷的一個前綴,可以預處理出來。