牛之關係譜(DP)

2021-10-20 13:30:17 字數 1362 閱讀 4353

農夫約翰正在考慮買進一批新的牛群。

在這個新的牛群中,每頭母牛都會生兩個孩子。

牛的關係可以用乙個包含 n 個節點的二叉樹來表示,此二叉樹應滿足下列性質:

每個節點的子節點數為 0 或 2。

樹的高度等於 k。樹的高度是指從根節點到任一葉子節點的最長路徑上的節點數。葉子節點是指沒有子節點的節點。

請問,共有多少種可能的譜系結構?

換句話說,共有多少種滿足上述性質的 n 個節點的二叉樹?

請輸出對 9901 取模後的答案。

輸入格式

共一行,包含兩個整數 n 和 k。

輸出格式

共一行,包含乙個整數,表示對 9901 取模後的答案。

資料範圍

3≤n<

200,

1100輸入樣例:53

輸出樣例:

2

樣例解釋

兩種可能的二叉樹結構如下:

@ @

/ \ / \

@ @ @ @

/ \ / \

@ @ @ @

思路:

此題關鍵在於樹的深度等於k不好求,而小於等於k很好求,所以轉化為求小於

k的減去小於等於k-

1的狀態表示:

f[i]

[j]:i個點可以組成深度小於等於k的樹的方案數

狀態計算:

列舉所有左兒子可能個數,從1到i-

2(至少剩下乙個根節點和右兒子),左右

數的種類相乘

f[i]

[j]+

= f[k]

[j -1]

* f[i - k - i]

[j -1]

計算狀態轉移時其實不用管乙個狀態實際存在不存在,因為我們邊界初始化時,

初始化的是實際可以用到的,也就是實際存在的,不存在的狀態在計算中一直

是0,所以不影響

#include

#include

#include

using

namespace std;

const

int n =

210, m =

110, mod =

9901

;int n, m;

int f[n]

[m];

//i個點可以組成深度小於等於j的樹的方案數

intmain()

牛客網dp專題 數字dp

題目 輸入a和b,求a到b的所有數之中有多少0出現 題解 先算個位,個位是0的情況有x種 再算十位,十位是0的情況有y種 一共是x y 用數字dp做 dp i 中存的是從0 99 9 共i個9 中0的個數 不含前導0 dp0 i 中存放的是00 0 99 9 共i個0,i個9 中0的個數 含前導0 ...

牛客 粉刷匠(dp)

有些題目可以進行二維dp,當然這題用四維也可以做。我們先做每一行,f,表示第i個用j次,塗前k個的最大值。做完後,可以把它看作分組揹包問題,每個木板都是乙個物品,再跑一邊dp即可 includeusing namespace std const int n 3e5 10 int f 55 2510 ...

px和dp的關係

view.getwidth 得到的寬度單位為 px px dp 螢幕密度 螢幕密度 print lg 裝置的絕對寬度 dm.widthpixels px print lg 裝置的絕對高度 dm.heightpixels px print lg 水平方向的dpi dm.xdpi print lg 豎直...