\(dp\)這東西真的是博大精深啊......
樹形\(dp\),顧名思義,就是在樹上操作的\(dp\),一般可以用\(f_i\)表示以編號為\(i\)的節點為根的子樹中的最優解。
轉移的時候一般都將資訊由子節點轉移到父親節點,也就是將資訊從下往上轉移。
因此,一般樹形\(dp\)都會採用遞迴的形式。
樹形\(dp\)中有一種比較經典的題型:樹上揹包。
其實它的思想與普通揹包差不多,關鍵在於它玄學的時間複雜度。
很多看似\(o(n^3)\)會\(t\)飛(實際上也的確是這樣)的題目,可能你用\(o(n^3)\)的樹上揹包卻能跑過(時間複雜度我也不會證),而且不是因為資料水。
可參考一道例題:【洛谷1273】有線電視網。
普通的樹的直徑可以用\(bfs\)來求,但如果是帶負權的,\(bfs\)就會被卡炸(可惜我之前不知道)。
於是就用上了樹形\(dp\)。
可參考一道例題:【雜題】訪問計畫。
好吧,\(dp\)好像也沒什麼東西可講,這樣介紹得還是不夠具體。乾脆直接看例題來理解一下吧。
第一道例題:【51nod1299】監獄逃離
這題是一道挺有意思的樹形\(dp\)題,我們可以考慮用\(f\)陣列來記錄每乙個節點的狀態:完全封死、可以從這個節點到達葉子節點、有犯人可以到達該節點,然後就不難統計出答案了。
第二道例題:【bzoj4033】[haoi2015] 樹上染色
比較經典的樹形\(dp\)題。這道題最值得注意的地方不是\(dp\)過程,而是注意在一棵有\(n\)個節點的樹上將\(m\)個節點染成黑色與將\(n-m\)個節點染成黑色其實是等價的,不加上這個優化就會\(tle\)。
第三道例題:【bzoj1040】[zjoi2008] 騎士
一道噁心的基環外向樹\(dp\),應該是比較模板的吧。
( 動態規劃專題 ) 樹形dp
動態規劃專題 樹形dp 直接看例題 p2015 二叉蘋果樹 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3...
動態規劃二(樹形DP)
顧名思義,是指將dp建立在樹狀結構的基礎上。問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正整數代表點 i 的權值。接...
動態規劃 樹形DP
樹形dp,即在樹上進行的動態規劃,由於樹固有的遞迴性質,因此樹形dp往往也遞迴進行。某大學有 n nn 個職員,編號為 1.n1.n 1.n 他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數 r ...