1. 程式人生 > >Problem - 9D - Codeforces

Problem - 9D - Codeforces

nbsp strong 討論 分類討論 bst 規劃 img 轉移 怎麽

https://codeforces.com/problemset/problem/9/D

一開始居然還想直接找公式的,想了想還是放棄了。原來這種結構是要動態規劃。

狀態是知道怎麽設了,tnh表示節點數為n個,樹高為h的BST的個數

為什麽要這麽設狀態呢?是考慮到題目關心BST的高度,而且BST具有遞歸性。

但是這個關鍵就是要加上n個節點的標記,因為不同節點數量明顯可以構造出的高為h的樹不同,而且也會影響BST另一側的構造。

所以說設對狀態就做對了一半。

思路就是按高為h的BST是怎麽由高為h-1的BST加上根節點轉移過來的,重點是向上轉移而不是向下轉移。

首先你要分類討論,這個根節點的數字是m,那麽左邊會有1~m-1共m-1個節點,右邊則有n-m個節點,然後分

1.左子樹的高是h-1,右子樹的高是0~h-1(假如可以放得下的話)。

2.右子樹的高是h-1,左子樹的高是0~h-2(註意是h-2,否則和上面重復)

左右子樹的構造是獨立的,所以相乘。兩種情況的分類的,所以相加。

最後遍歷一遍m得到所有tnh的和。

技術分享圖片

Problem - 9D - Codeforces