[TJOI2015] 概率论
我们设 \(f[n]\) 表示有 \(n\) 个节点的不同形态的二叉树的数量, \(g[n]\) 表示有 \(n\) 个节点的不同形态的二叉树的叶子节点的总和.
显然, \(f\) 是卡特兰数.
接下来让我们看一个结论:
\(g[i] = f[i - 1] * n\)
为什么呢?
- 考虑一个有 \(n\) 个节点 \(k\) 个叶子的二叉树, 我们删除任意一个叶子, 都是一棵二叉树, 并且分别删除 \(k\) 个点之后是 \(k\) 个不同的二叉树, 也就是每个叶子唯一对应一棵 \(n - 1\) 个节点的二叉树.
- 考虑一个有 \(n - 1\) 个节点的二叉树, 那它有 \(n\) 个位置可以放叶子, 所以每棵二叉树就被得到了 \(n\) 次.
- 综上, 我们可以得出结论, 所有 \(n\) 个点的二叉树的叶子总数等于 \(n - 1\) 个点的二叉树个数 \(* n\) .
我们要求的是 \(g[i] \over f[i]\) , 也就是 \(f[i - 1] * n \over f[i]\) , 由卡特兰数的递推式可以简单的得到结果就是 \(n(n + 1) \over n(2n - 1)\) .
\(code:\)
#include <bits/stdc++.h>
int main() {
double n;
scanf("%lf", &n);
printf("%.9lf", n * (n + 1) / (4 * n - 2));
return 0;
}