[CF9D]How many trees?

发布时间 2023-06-01 10:15:52作者: OIerBoy

2023-06-01

题目

题目传送门

难度&重要性(1~10):5

题目来源

Codeforces,luogu

题目算法

dp

解题思路

深度最大为 \(n\left(1\le n\le 35\right)\) 的二叉树暴力枚举显然不行,考虑dp。
\(f_{i,j}\) 表示有 \(i\) 个节点时,深度不大于 \(j\) 的二叉树数量。
答案容斥:\(f_{n,n}-f_{n,h-1}\)
这里,我们可以枚举 \(i-1\) 的左右儿子数量的状况来转移:

\[f_{i,j}=\sum\limits_{k=0}^if_{k,j-1}\cdot f_{i-k-1,j-1} \]

注意,这里我们要先枚举 \(j\),再枚举 \(i\),以保证前面的状态都已经枚举过。

完成状态

已完成