有關樹形DP的總結

樹形dp的主要思路

樹形揹包:與我們考普及組時寫的揹包dp相似,枚舉前i個物品,一共有j的容量可以取得的最優值。但是,這裏揹包的容量是不固定的,所以我們要加一維來枚舉揹包的容量。但是注意,這裏還是二維數組,我們通過本質上類似於滾動數組的方式來進行推導。因爲是從j-k推到j,所以我們一定要對循環逆序(不然就不是用i-1更新i了)

大概就是這樣。。。

一些例題(註釋裏是要注意的細節)

選課:https://www.luogu.org/problemnew/show/P2014

1.數組設定:要選的課的總數是answer,第一維是以x爲根的子樹,第二維是到此爲止一共選了j個課

2.特殊限值:如果選了兒子,必須要選爸爸(先修課程),所以爸爸這個揹包是強制要選的(j循環從1開始)

3.注意點:因爲根節點0是虛擬節點,所以要選修的課程實際上有m+1個。

 

重建道路:https://www.luogu.org/problemnew/show/P1272

1.思路:不如找割剩下來的子樹。枚舉節點們的lca,找總數是p的子樹

2.數組設定同上

3.特殊限值其實也一樣(因爲你要是不選lca就不是一棵子樹了)

4.別的還好。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章