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{inom{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 imes 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} imes (i+1) imes x^{i}$

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

所以最终答案就是 $frac{g_{n-1} imes 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; 
}

  

原文地址:https://www.cnblogs.com/guangheli/p/12187767.html