zoukankan      html  css  js  c++  java
  • 【bzoj4001】[TJOI2015]概率论 生成函数+导数

    题目描述

    输入

    输入一个正整数N,代表有根树的结点数

    输出

    输出这棵树期望的叶子节点数。要求误差小于1e-9

    样例输入

    1

    样例输出

    1.000000000


    题解

    生成函数+导数

    先考虑节点个数为$n$的二叉树有多少个:$c_0=1,c_i=sumlimits_{j=0}^{i-1}c_j*c_{i-j-1}$,显然这是Catalan数。

    令其生成函数为$F(x)$,由其递推式可以列出方程:$F(x)=xF(x)^2+1$,解得:

    $F(x)=frac{1-sqrt{1-4x}}{2x}$

    (此处根号前面不能取负号,因为如果取正,分子上常数项不为$0$,就会出现$frac 1x$项,它在生成函数中是无意义的($f(0)$无意义))

    然后设有$i$个节点的二叉树的期望叶子节点个数为$p_i$,那么$p_i=frac{sumlimits_{j=0}^{i-1}c_jc_{i-j-1}(p_j+p_{i-j-1})}{c_i}$

    $t_i=c_ip_i$,那么就有$t_1=1,t_i=sumlimits_{j=0}^{i-1}(c_jt_{i-j-1}+c_{i-j-1}t_j)=2sumlimits_{j=0}^{i-1}c_jt_{i-j-1}$

    于是再令$t$的生成函数为$G(x)$,那么有$G(x)=2xF(x)G(x)+x$,解出:

    $G(x)=frac x{sqrt{1-4x}}$

    接下来是戏剧性的一幕:

    $(xF(x))'=frac 1{sqrt{1-4x}}=frac{G(x)}x$

    这说明F与G的每一项都是有联系的。考虑$xF(x)$的每一项:$x·c_nx^n=c_nx^{n+1}$,求导之后变为$(n+1)c_nx^n$,而等式右端对应的项为$frac{t_{n+1}x^{n+1}}x=t_{n+1}x^n$,因此说明$t_{n+1}=(n+1)c_n$,即:

    $t_n=nc_{n-1}$

    又因为$t_n=c_np_n$,所以有:

    $p_n=frac{nc_{n-1}}{c_n}$

    而又因为$c$为卡特兰数,因此$c_n=frac{C_{2n}^n}{n+1}$。所以把式子带进去,就可以推出:

    $p_n=frac{n(n+1)}{2(2n-1)}$

    貌似本题如果在考场上的话直接打表都能推出结论吧。。。

    代码还要看吗?。。。

    #include <cstdio>
    int main()
    {
        double n;
        scanf("%lf" , &n);
        printf("%.9lf
    " , n * (n + 1) / (2 * n - 1) / 2);
        return 0;
    }
    

     

  • 相关阅读:
    脚本
    vim 马哥
    动态删除节点
    动态插入节点
    动态创建内容
    获取html元素内容
    设置元素的属性
    获取元素的属性
    jquery中:input和input的区别
    jQuery选择器总结
  • 原文地址:https://www.cnblogs.com/GXZlegend/p/7515814.html
Copyright © 2011-2022 走看看