WD与积木

题目:
https://www.luogu.com.cn/problem/P5162

思路:
设总的方案数为 g n g_n gn,所有方案的层数的总数为 f n f_n fn,则答案就是 f n g n \frac{f_n}{g_n} gnfn。先算 g n g_n gn
g n = ∑ i = 1 n ( n i ) g n − i g_n=\sum_{i=1}^{n}{n\choose i}g_{n-i} gn=i=1n(in)gni
含义就是我们枚举第一层里都有哪些积木,再乘上剩下的积木贡献的方案数 g n − i g_{n-i} gni,化简。
g n = n ! i ! ( n − i ) ! g n − i g n n ! = ∑ i = 1 n 1 i ! g n − i ( n − i ) ! \begin{aligned} g_n&=\frac{n!}{i!(n-i)!}g_{n-i}\\ \frac{g_n}{n!}&=\sum_{i=1}^{n}\frac{1}{i!}\frac{g_{n-i}}{(n-i)!}\\ \end{aligned} gnn!gn=i!(ni)!n!gni=i=1ni!1(ni)!gni
G n = g n n ! , H n = 1 n ! G_n=\frac{g_n}{n!},H_n=\frac{1}{n!} Gn=n!gn,Hn=n!1,则
G n = ∑ i = 1 n H i G n − i G_n=\sum_{i=1}^{n}H_iG_{n-i} Gn=i=1nHiGni
g 0 = G 0 = H 0 = 1 g_0=G_0=H_0=1 g0=G0=H0=1
类似卷积,考虑生成函数 G = ∑ i = 0 ∞ G i x i , H = ∑ i = 0 ∞ H i x i G=\sum_{i=0}^{\infty}G_ix^i,H=\sum_{i=0}^{\infty}H_ix^i G=i=0Gixi,H=i=0Hixi
H ∗ G = ∑ i = 0 ∞ ∑ j = 0 i H i G i − j x i H*G=\sum_{i=0}^{\infty}\sum_{j=0}^{i}H_iG_{i-j}x^i\\ HG=i=0j=0iHiGijxi
i > 0 i>0 i>0
∑ j = 0 i H i G i − j x i = H 0 G i x i + ∑ j = 1 i H i G i − j x i = ( H 0 G i + G i ) x i = 2 G i x i \begin{aligned} \sum_{j=0}^{i}H_iG_{i-j}x^i&=H_0G_ix^i+\sum_{j=1}^{i}H_iG_{i-j}x^i\\ &=(H_0G_i+G_i)x^i\\ &=2G_ix^i \end{aligned} j=0iHiGijxi=H0Gixi+j=1iHiGijxi=(H0Gi+Gi)xi=2Gixi
i = 0 i=0 i=0
H 0 G 0 x 0 = x 0 = ( 2 G 0 − 1 ) x 0 H_0G_0x^0=x^0=(2G_0-1)x^0 H0G0x0=x0=(2G01)x0
所以
H ∗ G = ∑ i = 0 ∞ ∑ j = 0 i H i G i − j x i = H 0 G 0 x 0 + ∑ i = 1 ∞ ∑ j = 0 i H i G i − j x i = ( 2 G 0 − 1 ) x 0 + ∑ i = 1 ∞ 2 G i x i = − 1 + 2 ∑ i = 0 ∞ G i x i = 2 G − 1 G = ( 2 − H ) − 1 \begin{aligned} H*G=\sum_{i=0}^{\infty}\sum_{j=0}^{i}H_iG_{i-j}x^i&=H_0G_0x^0+\sum_{i=1}^{\infty}\sum_{j=0}^{i}H_iG_{i-j}x^i\\ &=(2G_0-1)x^0+\sum_{i=1}^{\infty}2G_ix^i\\ &=-1+2\sum_{i=0}^{\infty}G_ix^i\\ &=2G-1\\ G=(2-H)^{-1} \end{aligned} HG=i=0j=0iHiGijxiG=(2H)1=H0G0x0+i=1j=0iHiGijxi=(2G01)x0+i=12Gixi=1+2i=0Gixi=2G1
用多项式求逆即可。
再来算 f n f_n fn
f n = ∑ i = 1 n ( n i ) ( f n − i + g n − i ) f n n ! = ∑ i = 1 n 1 i ! [ f n − i ( n − i ) ! + g n − i ( n − i ) ! ] \begin{aligned} f_n&=\sum_{i=1}^{n}{n\choose i}(f_{n-i}+g_{n-i})\\ \frac{f_n}{n!}&=\sum_{i=1}^{n}\frac{1}{i!}\big[\frac{f_{n-i}}{(n-i)!}+\frac{g_{n-i}}{(n-i)!}\big] \end{aligned} fnn!fn=i=1n(in)(fni+gni)=i=1ni!1[(ni)!fni+(ni)!gni]
解释就是还是枚举第一层,然后总层数就是剩下 n − i n-i ni个积木贡献的总层数,加上第一个盒子的贡献。还是考虑生成函数。
F n = f n n ! , F 0 = f 0 = 0 F_n=\frac{f_n}{n!},F_0=f_0=0 Fn=n!fn,F0=f0=0
F n = ∑ i = 1 n H i ( F n − i + G n − i ) F_n=\sum_{i=1}^{n}H_i(F_{n-i}+G_{n-i}) Fn=i=1nHi(Fni+Gni)
F = ∑ i = 0 ∞ F i x i F=\sum_{i=0}^{\infty}F_{i}x^i F=i=0Fixi
H ∗ ( F + G ) = ∑ i = 0 ∞ ∑ j = 0 i H i ( F i − j + G i − j ) x i H*(F+G)=\sum_{i=0}^{\infty}\sum_{j=0}^{i}H_i(F_{i-j}+G_{i-j})x^i\\ H(F+G)=i=0j=0iHi(Fij+Gij)xi
i > 0 i>0 i>0
∑ j = 0 i H i ( F i − j + G n − i ) x i = H 0 ( F i + G i ) x i + ∑ j = 1 i H i ( F i − j + G n − i ) x i = ( 2 F i + G i ) x i \begin{aligned} \sum_{j=0}^{i}H_i(F_{i-j}+G_{n-i})x^i&=H_0(F_i+G_i)x^i+\sum_{j=1}^{i}H_i(F_{i-j}+G_{n-i})x^i\\ &=(2F_i+G_i)x^i\\ \end{aligned} j=0iHi(Fij+Gni)xi=H0(Fi+Gi)xi+j=1iHi(Fij+Gni)xi=(2Fi+Gi)xi
i = 0 i=0 i=0
H 0 ( F 0 + G 0 ) x 0 = x 0 = ( 2 F 0 + G 0 ) x 0 H_0(F_0+G_0)x^0=x^0=(2F_0+G_0)x^0 H0(F0+G0)x0=x0=(2F0+G0)x0
所以
H ∗ ( F + G ) = 2 F + G F = ( 1 − G ) ∗ ( H − 2 ) − 1 \begin{aligned} H*(F+G)&=2F+G\\ F&=(1-G)*(H-2)^{-1} \end{aligned} H(F+G)F=2F+G=(1G)(H2)1
最后答案就是 [ x n ] F [ x n ] G \frac{[x^n]F}{[x^n]G} [xn]G[xn]F

猜你喜欢

转载自blog.csdn.net/qq_43520313/article/details/108847547
WD