似乎是套路了点?
首先你要会 DP,设 fn 表示 n 块积木所有方案的总高度,gn 表示 n 块积木的方案数。
然后枚举某一层的积木数,并注意到新增的高度相当于方案数,在 n>0 时有 gn=n∑i=1(ni)gn−ifn=gn+n∑i=1(ni)fn−i
拆掉 (ni),有 gnn!=n∑i=11i!gn−i(n−i)!fnn!=gnn!+n∑i=11i!fn−i(n−i)!
然后呢发现这很像 EGF……
令 F,G 分别为 f,g 的 EGF。
g 的 DP 式特像卷积有木有,但是要去掉 i=0 的那一项并补回 g0。
即 G(x)=exG(x)−∞∑i=1gii!=(ex−1)G(x)+1(2−ex)G(x)=1G(x)=12−ex
同理易得 F(x)=G(x)−12−ex
于是求个逆然后卷一卷就做完了。
(其实因为要输出概率,所以可以直接输出 fn/n!gn/n!)
代码:
1 |
|