1 条题解
-
0
自动搬运
来自洛谷,原作者为

_rqy
**搬运于
2025-08-24 21:55:09,当前版本为作者最后更新于2018-06-02 18:51:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
...这道题比楼下说的还要神奇——它不仅代码好写,证明也不用楼下说的那么麻烦。
首先,我们令表示个点的二叉树个数;表示个点的所有棵二叉树的叶节点总数。
找规律第一步当然是打表啦~写个爆搜或者手算都可以。
n 1 2 3 4 5 ... 1 2 5 14 42 ... 6 20 70 我们发现一个规律:。
证明这个规律其实超级简单:
- 对于每棵个点的二叉树,如果里面有个叶节点,那么我们分别把这个叶子删去会得到棵个点的二叉树;
- 而每棵个点的二叉树恰好有个位置可以悬挂一个新的叶子,所以每棵个点的二叉树被得到了次;
- 综上,我们即可得出结论:所有个点的二叉树的叶子个数和等于个点的二叉树个数。
那么我们只需要求出即可。而的递推式可以通过枚举左子树结点个数得到:
边界是。应该可以一眼看出来这是Catalan数列(其实一看那个就应该知道,滑稽)
于是答案即为
代入卡特兰数的通项公式很容易就得到上式等于。
代码:
#include <cstdio> int main() { double n; scanf("%lf", &n); printf("%.12f", n * (n + 1) / (2 * (2 * n - 1)); return 0; }
- 1
信息
- ID
- 2930
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者