BZOJ 4001: [TJOI2015]概率论 生成函数+求导

求:$n$ 个点的二叉树叶子个数期望.

设 $f_{n}$ 表示 $n$ 个点所有不同的二叉树叶子总个数,$g_{n}$ 表示 $n$ 个点不同的二叉树个数.

则有 $ans=\frac{f_{n}}{g_{n}}$

有 $g_{n}=\sum_{i=0}^{n-1}g_{i}g_{n-i-1}$

同时,这个 $g$ 的定义就是卡特兰数,所以还有 $g_{n}=\frac{\binom{2n}{n}}{n+1}$

设 $G(x)$ 表示 $g$ 的生成函数,则有 $G(x)=xG(x)^2+1$

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

我们将 $G(x)=\frac{1+ \sqrt{1-4x}}{x}$ 舍掉的原因是 $G(0)$ 没有任何意义(当验证生成函数的合法性时可以将 0 带入)

有 $f_{n}=2\times \sum_{i=0}^{n-1}f_{i}g_{n-i-1}$,$F(x)=2xF(x)G(x)+x^{1}$ (我们向右平移生成函数时会损失掉最低位)

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

得到 $F,G$ 的生成函数后,我们要试图寻找 $F,G$ 的关系.

有 $’(xG(x))=\frac{1}{\sqrt{1-4x}}=\frac{F(x)}{x}$

求完导后,$xG(x)$ 的第 $i$ 项为 $g_{i}\times (i+1) \times x^{i}$

$\frac{F(x)}{x}$ 中第 $i$ 项为 $f_{i+1}\times x_{i}$,故有 $g_{i}\times (i+1)=f_{i+1}$

所以最终答案就是 $\frac{g_{n-1}\times n}{g_{n}}$    

#include <iostream>   
#include <bits/stdc++.h>       
#define ll long long 
using namespace std;
int main() 
{  
    double n;  
    scanf("%lf",&n); 
    printf("%.10f",(double)n*(n+1)/(2*(2*n-1)));   
    return 0; 
}

  

posted @ 2020-01-13 16:05  EM-LGH  阅读(192)  评论(0编辑  收藏  举报