「总结」多项式生成函数例题(3)

因为光讲知识不会套路是不行的这个。
所以我要给你们讲套路的这个。

1.遗忘的集合
http://hzoj.com/contest/220/problem/2
看起来是个构造题。
啊但是啊。
学了\(OGF\)啊,我给你讲了背包的套路。
然后你就发现他是唯一方案了对吧。
然后就推式子就行了。
我们设答案的布尔数组为:\[A(x)=\sum\limits_{i=1}^{n}a_ix^i\]
这里的\(a_i\in[0,1]\)
\(f(n)\)\(OGF\)\(F(x)=\sum\limits_{i=1}^{n}f(i)x^i\)
所以,套上完全背包的板子推式子就完事了。
\[\begin{aligned}\\ F(x)&=\prod\limits_{i=1}^{n}(\sum\limits_{i=0}^{\infty}(x^i)^j)^{a_i}\\ &=\prod\limits_{i=1}^{n}(\frac{1}{1-x^i})^{a_i}\\ ln(F(x))&=ln(\prod\limits_{i=1}^{n}(\frac{1}{1-x^i})^{a_i})\\ &=\sum\limits_{i=1}^{n}a_i(0-ln(1-x^i))\\ &=-\sum\limits_{i=1}^{n}a_iln(1-x^i)\\ &=-\sum\limits_{i=1}^{n}a_i(-\sum\limits_{j=1}^{\infty}\frac{(x^i)^j}{j})\\ &=\sum\limits_{i=1}^{n}a_i\sum\limits_{j=1}^{\infty}\frac{(x^i)^j}{j}\\ r&=ij\\ &=\sum\limits_{r=1}^{\infty}x^r\sum\limits_{i|r}a_i\frac{i}{r}\\ \end{aligned}\]
这样我们对\(F(x)\)求一个\(ln\)就可以得到:
\[\begin{aligned}\\ [x^r]F(x)=\sum\limits_{i|r}a_i\frac{i}{r}\\ r[x^r]F(x)=\sum\limits_{i|r}a_ii\\ \end{aligned}\]
\(g(n)=n[x^n]F(x),h(n)=na_n\)
那么:
\[g(n)=\sum\limits_{d|n}h(d)\]
莫比乌斯反演得到:
\[h(n)=\sum\limits_{d|n}\mu(\frac{n}{d})g(d)\]
\[a_n=\frac{h(n)}{n}\]
直接输出就可以了。
哦忘记了。
是任意模数。
打个\(MTT\)吧。

2.生成树计数
http://hzoj.com/contest/220/problem/3
先说一下题很裸但是根本不可做。。。
直接讲了。
为什么不可做因为你不会套路。。
生成函数全是套路发现了吗?
这题要打全家桶,板子不会的出门左转。
首先可以用\(prufer\)序列统计答案。
设一个联通块在\(prufer\)序列中出现的次数为\(d_i\)
那么答案可以表示为:
\[\begin{aligned}\\ ans&=\sum\limits_{T}(\prod\limits_{i=1}^{n}(d_i+1)^m)(\sum\limits_{i=1}^{n}(d_i+1)^m)\\ &=\sum\limits_{T}(n-2)!(\prod\limits_{i=1}^{n}\frac{a_i^{d_i+1}(d_i+1)^m}{d_i!})(\sum\limits_{i=1}^{n}(d_i+1)^m)\\ &=(n-2)!\prod\limits_{i=1}^{n}a_i\sum\limits_{T}\prod\limits_{i=1}^{n}\frac{a_i^{d_i}(d_i+1)^m}{d_i!}\sum\limits_{i=1}^{n}(d_i+1)^m\\ &=(n-2)!\prod\limits_{i=1}^{n}a_i\sum\limits_{T}\sum\limits_{i=1}^{n}\frac{a_i^{d_i}(d_i+1)^{2m}}{d_i!}\prod\limits_{j=1,j!=i}\frac{a_j^{d_j}(d_j+1)^m}{d_j!}\\ A(x)&=\sum\limits_{i=0}^{n}\frac{(i+1)^{2m}}{i!}x^i\\ B(x)&=\sum\limits_{i=0}^{n}\frac{(i+1)^{m}}{i!}x^i\\ ans&=(n-2)!\prod\limits_{i=1}^{n}a_i[x^{n-2}]\sum\limits_{i=1}^{n}A(a_ix)\prod\limits_{j=1,j!=i}^{n}B(a_jx)\\ &=(n-2)!\prod\limits_{i=1}^{n}a_i[x^{n-2}]\sum\limits_{i=1}^{n}\frac{A(a_ix)}{B(a_ix)}\prod\limits_{j=1}^{n}B(a_jx)\\ &=(n-2)!\prod\limits_{i=1}^{n}a_i[x^{n-2}]\sum\limits_{i=1}^{n}\frac{A}{B}(a_ix)exp(ln(\prod\limits_{j=1}^{n}B(a_jx)))\\ &=(n-2)!\prod\limits_{i=1}^{n}a_i[x^{n-2}]\sum\limits_{i=1}^{n}\frac{A}{B}(a_ix)exp(\sum\limits_{j=1}^{n}ln(B(a_jx)))\\ \end{aligned}\]
我们需要求一个数列\(g(j)\)
\[g(j)=\sum\limits_{i=1}^{n}a_i^j\]
这样我们把\(g(j)\)和求出的\(\frac{A}{B},ln(B)\)对位相乘就可以直接得到:
\[\sum\limits_{i=1}^{n}\frac{A}{B}(a_ix),\sum\limits_{i=1}^{n}ln(B(a_ix))\]
现在考虑如何求\(g(j)\)
求数列的前\(k\)次方和,这是个套路(奇迹银桥)。
设其生成函数为\(G(x)=\sum\limits_{i=0}^{\infty}g(i)x^i\)
那么:
\[\begin{aligned}\\ G(x)&=\sum\limits_{i=0}^{\infty}\sum\limits_{j=1}^{n}a_j^ix^i\\ &=\sum\limits_{j=1}^{n}\sum\limits_{i=0}^{\infty}(a_jx)^i\\ &=\sum\limits_{j=1}^{n}\frac{1}{1-a_jx}\\ \end{aligned}\]
\[(ln(1-a_ix))'=\frac{-a_i}{1-a_ix}=-\sum\limits_{j=0}^{\infty}(a_ix)^ja_i\]
\[F(x)=\sum\limits_{i=1}^{n}(ln(1-a_ix))'=-\sum\limits_{i=1}^{n}\sum\limits_{j=0}^{\infty}(a_ix)^ja_i=-\sum\limits_{j=0}^{\infty}x^j\sum\limits_{i=1}^{n}(a_i)^{j+1}\]
这样有:
\[G(x)=-xF(x)+n\]
如果我们可以快速的求出\(F(x)\)就好了。
\(F(x)\)既然是我造出来的我肯定会求对吧。
\[F(x)=\sum\limits_{i=1}^{n}(ln(1-a_ix))'=(\sum\limits_{i=1}^{n}ln(1-a_ix))'=(ln(\prod\limits_{i=1}^{n}1-a_ix)'\]
好了可以直接分治\(FFT\)了。

3.Or
http://hzoj.com/contest/133/problem/3
题意就是要求\(A\)数列后面一项必然要出现一个之前从未出现过的\(1\)
\(dp[i][j]\)为前\(i\)个数,有\(j\)位已经出现过了\(1\)的方案数。
那么:
\[dp[i][j]=\sum\limits_{k=1}^{j}dp[i-1][j-k]\binom{j}{k}2^{j-k}\]
拆一下式子,找指数生成函数的影子。
\[\frac{dp[i][j]}{j!}=\sum\limits_{k=1}^{j}\frac{dp[i-1][j-k]2^{j-k}}{(j-k)!}\frac{1}{k!}\]
\(F_i(x)\)\(dp[i]\)的生成函数。
\[F_i(x)=\sum\limits_{j=0}^{\infty}\frac{dp[i][j]x^j}{j!}\]
所以:
\[F_i(x)=F_{i-1}(2x)(e^x-1)\]
写成迭代式:
\[F_n(x)=\prod\limits_{i=0}^{n-1}e^{2^ix}-1\]
这时候题解的方式显得麻烦。我们已经学会多项式全家桶了。
\[\begin{aligned}\\ F_n(x)+n&=\prod\limits_{i=0}^{n-1}e^{2^ix}\\ &=exp(ln(\prod\limits_{i=0}^{n-1}e^{2^ix}))\\ &=exp(\sum\limits_{i=0}^{n-1}2^ix)\\ \end{aligned}\]
直接把系数加起来然后\(exp\)回去就行了。
这样就可以得到\(dp[n][i]\)了。
直接统计答案即可。

猜你喜欢

转载自www.cnblogs.com/Lrefrain/p/12031466.html
今日推荐