TJOI[2015]概率论
原本想学学生成函数的,结果被网上一个博客带到了这题,这题感觉严格的数学证明太难了,所以就看了一个最简单的题解做法。
首先我们令\(f_n\) 表示 \(n\)个点的二叉树个数,\(g_i\)表示\(n\)个点构成的所有二叉树的叶子结点个数。
- 对于一棵有\(n\)个结点的二叉树,假设其有\(k\)个叶子结点,则分别删除这\(k\)叶子结点,则可以得到\(k\)棵有\(n - 1\)个结点的二叉树
- 而每棵\(n - 1\)个点的二叉树恰好有\(n\)个位置可以悬挂一个新的叶子,所以每棵\(n - 1\)个点的二叉树被得到了\(n\)次;
- 综上,我们即可得出结论:所有\(n\)个点的二叉树的叶子个数和等于\(n-1\)个点的二叉树个数\(\times n\)。
\[f_n = \sum_{i = 1}^{n - 1} f_if_{n-1-i}
\]
边界\(f_1 = 1\)。显然该序列是Catalan序列。
于是答案即为
\[\frac{g_n}{f_n} = \frac{nf_{n-1}}{f_n}
\]
代入Catalan数的通项公式\(\frac{\tbinom{2n}{n}}{n + 1}\)得
\[\frac{n(n+1)}{2(2n-1)}
\]
#include <iostream>
using namespace std;
int main() {
double n;
scanf("%lf", &n);
printf("%.12f", n * (n + 1) / (2 * (2 * n - 1));
return 0;
}

浙公网安备 33010602011771号