其實也沒有那麼難,只是自己不敢想
先把解法說一下,因為要用dp麼,根據樹的遞迴的特性設計狀態,因為題目要求的是各種距離最多能訪問到多少點
但是以距離作為狀態會空間不夠用,所以要把值比較大的東西存成資料,作為dp的值而不是狀態量
dp需要考慮哪些狀態?1.那個節點出發是必須的。2.決策要考慮要不要走回頭路回到這個節點,所以分成了回到這個節點和不回到這個節點(這個不好想)
最後乙個是能訪問多少個節點,然後設計轉移
如果回到這個節點,那一定會有最後一步回來,列舉最後一步從哪個點回來就可以了
如果不是回到這個點,一種是直接從自己出發一次都不回來,一種是回來一次,再出去
然後就可以了……還是挺難的,一步錯都不行
LA 4015 樹形揹包
題意 給一棵樹,每條邊上有一些權值,求 長度不超過 x 最多能走多少個點 分析 考慮每乙個節點,他可以一直走下去,也可以走回來而走到他的兄弟節點 狀態定義 d x j 0 1 從 i 出發,走 j 個節點的最短距離 1 回來,這就是乙個揹包,更新當前節點 2 不回來,則是要考慮從哪個部分不回來 1 ...
LA4015,論DP中順序的重要性
樹形dp,設f u,i 為從u出發,遍歷了i個點 包括u自身 的最短距離,g u,i 表示從u出發,遍歷了i個點 不包括u自身 的最短距離。記x到y的距離為dis x,y 狀態轉移方程 f x,i min f x,i j f y,j dis x,y 2 y是x的兒子 g x,i min f x,i ...
狀態壓縮DP 樹形D
動態規劃的狀態有時候比較難,不容易表示出來,需要用一些編碼技術,把狀態壓縮的用簡單的方式表示出來。典型方式 當需要表示乙個集合有哪些元素時,往往利用2進製用乙個整數表示。一般有個資料 n 16 或者 n 32 這個很可能就是狀態dp的標誌,因為我們要用乙個int的二進位制來表示這些狀態。要注意好這些...