農夫約翰正在考慮買進一批新的牛群。
在這個新的牛群中,每頭母牛都會生兩個孩子。
牛的關係可以用乙個包含 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 豎直...