• 题解「TJOI2015 概率论」


    (g_n)(n) 个节点的二叉树所有情况下的叶子节点数和,(f_n)(n) 个节点的二叉树的本质不同方案数。则我们断言 (g_n=nf_{n-1})

    试图证明这一结论。

    对于一棵有 (a) 个叶子节点的二叉树,分别删去 (a) 个叶子节点,可以得到 (a) 棵不同的 (n-1) 个节点的二叉树。我们标记这些 (n-1) 个节点的二叉树,则最终 (g_n) 的值就为所有 (n-1) 个节点的二叉树被标记的次数。

    现在我们需要证明,任意一棵 (n-1) 个节点的二叉树,都会被标记 (n) 次。设只有 (1) 个儿子节点的点有 (b) 个,有 (2) 个儿子节点的点有 (c) 个。那么有:

    [egin{cases} b+2c=n-1 \ a+b+c=n end{cases} ]

    可以解得 (2a+b=n+1)。想一想,(a) 个叶子节点每个点可以接 (2) 个叶子,(b) 个只有一个儿子节点的点可以接 (1) 个叶子,也就是说:一棵 (n) 个点的树有 (n+1) 个不同的位置可以接叶子。换言之,任意一棵 (n-1) 个点的二叉树,都一定会被标记 (n) 次。

    那么 (f_n) 怎么求呢?枚举左子树节点数,有:

    [f_n=sum_{i=0}^{n-1}f_if_{n-i-1} ]

    这不就是 (Cat_n) 么,直接通项求就好了。

    最终答案 (ans=frac{nf_{n-1}}{f_n}=frac{n(n+1)}{2(2n-1)})

  • 相关阅读:
    npm脚本和package.json
    Vue官方文档笔记(二)
    Vue官方文档笔记
    2019windows上安装Mac OS 10.14过程详细截图
    三次握手四次挥手
    ==和equals的区别
    Stringbuffer和Stringbuilder的区别
    字符串拼接五种常用方法
    什么是线程以及保证线程安全
    什么是线程安全,怎样保证线程安全
  • 原文地址:https://www.cnblogs.com/tommy0103/p/13903044.html
Copyright © 2020-2023  润新知