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 
using namespace std;

int main() {
  double n;
  scanf("%lf", &n);
  printf("%.12f", n * (n + 1) / (2 * (2 * n - 1));
  return 0;
}

你可能感兴趣的:(TJOI[2015]概率论)