bzoj4001: [TJOI2015]概率论(生成函数)

传送门
生成函数好题。
题意简述:求 n n n个点的树的叶子数期望值。


思路:
考虑 f n f_n fn表示 n n n个节点的树的数量。
所以有递推式 f 0 = 1 , f n = ∑ i = 0 n − 1 f i f n − 1 − i ( n > 0 ) f_0=1,f_n=\sum_{i=0}^{n-1}f_if_{n-1-i}(n>0) f0=1,fn=i=0n1fifn1i(n>0)
正是一个卷积的形式。
那么 f n f_n fn的生成函数 F ( x ) = x F 2 ( x ) + 1 F(x)=xF^2(x)+1 F(x)=xF2(x)+1 注意要填上 f 0 f_0 f0
同理,考虑 g n g_n gn表示 n n n个节点的树的叶子数总数。
有递推式 g 0 = 0 , g 1 = 1 , g n = 2 ∑ i = 0 n − 1 f i g n − i − 1 ( n > 1 ) g_0=0,g_1=1,g_n=2\sum_{i=0}^{n-1}f_ig_{n-i-1}(n>1) g0=0,g1=1,gn=2i=0n1figni1(n>1)
所以 g n g_n gn的生成函数 G ( x ) = 2 x F ( x ) G ( x ) + x G(x)=2xF(x)G(x)+x G(x)=2xF(x)G(x)+x 注意要填上 g 1 g_1 g1
然后 F ( x ) = x F 2 ( x ) + 1 F(x)=xF^2(x)+1 F(x)=xF2(x)+1
<=> x F 2 ( x ) − F ( x ) + 1 = 0 xF^2(x)-F(x)+1=0 xF2(x)F(x)+1=0
<=> F ( x ) = 1 − 1 − 4 x 2 x F(x)=\frac{1-\sqrt{1-4x}}{2x} F(x)=2x114x 不取 1 + 1 − 4 x 2 x \frac{1+\sqrt{1-4x}}{2x} 2x1+14x 是因为它不能向0收敛
G ( x ) = x 1 − 2 x F ( x ) = x 1 − 4 x G(x)=\frac x{1-2xF(x)}=\frac x{\sqrt{1-4x}} G(x)=12xF(x)x=14x x
然后我们对 x F ( x ) xF(x) xF(x)求导: ( x F ( x ) ) ′ = 1 1 − 4 x = G ( x ) x (xF(x))'=\frac1{\sqrt{1-4x}}=\frac{G(x)}x (xF(x))=14x 1=xG(x)
而对于 x F ( x ) xF(x) xF(x) n n n f n x n + 1 f_nx^{n+1} fnxn+1求导之后会变成 f n ( n + 1 ) x n f_n(n+1)x^n fn(n+1)xn等式右边: g n + 1 x n + 1 x = g n + 1 x n \frac{g_{n+1}x^{n+1}}x=g_{n+1}x^n xgn+1xn+1=gn+1xn,那么 g n + 1 = f n ( n + 1 ) g_{n+1}=f_n(n+1) gn+1=fn(n+1)
我们令答案的函数是 A ( x ) = ∑ i = 0 ∞ p n x n A(x)=\sum_{i=0}^{\infty}p_nx^n A(x)=i=0pnxn
那么 g n = f n − 1 n = p n f n = > p n = f n − 1 n f n g_n=f_{n-1}n=p_nf_n=>p_n=\frac{f_{n-1}}{nf_n} gn=fn1n=pnfn=>pn=nfnfn1
仔细观察会发现 f n f_n fn是卡特兰数,然后带入就做完了。
代码:

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

你可能感兴趣的:(#,生成函数)