zoukankan      html  css  js  c++  java
  • luogu3978 [TJOI2015]概率论

    题目链接:洛谷

    题目大意:求所有$n$个点的有根二叉树的叶子节点数总和/$n$个点的有根二叉树的个数。

    数据范围:$nleq 10^9$


    生成函数神题!!!!(我只是来水博客的)

    首先$n$个点的有根二叉树的个数就是卡特兰数,我们考虑求分子。

    设卡特兰数$g_i=frac{C_{2n}^n}{n+1}$,分子是$f_i$则

    $$f_n=2*sum_{i=0}^{n-1}g_i*f_{n-i-1}(ngeq 2)$$

    $$g_n=sum_{i=0}^{n-1}g_i*g_{n-i-1}(ngeq 2)$$

    $$f_0=0,f_1=g_0=g_1=1$$

    设$f_i$和$g_i$的生成函数分别为$F(x),G(x)$则

    $$G(x)=xG(x)^2+x$$

    $$F(x)=2xF(x)G(x)+x$$

    先解得

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

    注意这里要用到一个技巧,就是当发现解出来有两个解的时候,我们可以代入特殊值。

    我们发现$1=g_0=G(0)=limlimits_{x ightarrow 0}frac{1pmsqrt{1-4x}}{2x}$所以

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

    代入第一个式子就可以得出

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

    因为我们知道$g_n$的通项公式,所以我们可以用生成函数来推出$f_n$

    凑一下就知道是

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

    然后就发现$G(x)$的其中一项$g_ix^i$经过运算后贡献到了$(i+1)g_ix^i$,$f_{i+1}x^{i+1}$贡献到了$f_{i+1}x^i$

    所以$f_n=ng_{n-1}=C_{2n-2}^{n-1}$

    所以

    $$Ans=frac{f_n}{g_n}=frac{C_{2n-2}^{n-1}*(n+1)}{C_{2n}^n}=frac{n(n+1)}{2(2n-1)}$$

    (然后你就做完了别人打表做出来的东西)

    不放代码了,这个只有8行。

  • 相关阅读:
    html
    jQuery
    Python基础(一)
    excel中怎样批量取消隐藏工作表
    AD密码过期查询
    @Controller和@RestController的区别
    编写一个JPA测试用例
    SpringBoot(二)——使用Mysql和JPA
    Linux命令大全
    Centos7安装Mysql
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/10629031.html
Copyright © 2011-2022 走看看