多项式题目总结

多项式题目总结

最近把学长讲的生成函数, 多项式(也不知道叫啥, 反正要推式子)的题都做了, 趁还记得写个总结.

P2000 拯救世界

题目链接

普通型生成函数板子题.

定义一个多项式\(A(x) = \sum_{i=0}^{\infty} a_i*x^i\)\(i\)项的系数\(a_i\)为石头数量为\(i\)时的答案.

把它和另外一个多项式(\(B(x) = \sum_{i=0}^{\infty} b_i*x^i\))乘起来就是 : \(C(x) = \sum_{i=0}^{\infty} \sum_{j=0}^{\infty} a_i*b_j*x^{i+j}\), 会得到石头数量为\(i+j\)的答案.

比如说第一个, 金神石需要是6的倍数, 那我们就可以拿总数为0, 6, 12, 18, 24...的石头, 对应的多项式就是 : \(1 + x^6 + x^{12} + x^{18} + \dots\)

木神石最多用九块, 那我们就可以拿总数为0, 1, 2, 3, ... , 9的石头, 对应的多项式就是\(1 + x + x^2 + \dots + x^9\).

最后我们把每一个多项式都乘起来, 所得的\(x^n\)的系数就是总数为\(n\)块石头时的合法方案数了.

P2012 拯救世界2

题目链接

指数型生成函数板子题.

定义一个多项式\(A(x) = \sum_{i=0}^{\infty} a_i* \frac{x^i}{i!}\)\(i\)项的系数\(a_i\)是基因序列长度为\(i\)时的答案.

把它和另外一个多项式(\(B(x) = \sum_{i=0}^{\infty} b_i *\frac{x^i}{i!}\))乘起来就是 : \(C(x) = \sum_{i=0}^{\infty} \sum_{j=0}^{\infty} a_i* \frac{x^i}{i!} b_j* \frac{x^j}{j!} = \sum_{i=0}^{\infty} \sum_{j=0}^{\infty} \frac{a_i *b_j*(i+j)!}{i! * j!}* \frac{x^{i+j}}{i+j!} = \sum_{i=0}^{\infty} \sum_{j=0}^{\infty} C_{i+j}^{i}a_i *b_j* \frac{x^{i+j}}{i+j!}\), 会得到基因序列长度为\(i+j\)的答案.

这道题和上一道题的区别就在于 : 这道题有顺序, 上道题没有. 所以这里要多乘上一个\(C_{i+j}^{i}\), 表示要从前\(i+j\)个位置中选出\(i\)个位置放\(a\).

首先我们需要知道这四个公式 :

\[\sum_{i = 0}^{\infty} c^i * \frac{x^i}{i!} = e^{cx} \\ \sum_{i = 0}^{\infty} \frac{x^i}{i!} = e^{x} \\ \sum_{i = 0}^{\infty} \frac{x^{2i + 1}}{(2i + 1)!} = \frac{e^x - e^{-x}}{2} \\ \sum_{i = 0}^{\infty} \frac{x^{2i}}{(2i)!} = \frac{e^x + e^{-x}}{2} \]

这道题里第一个条件是\(ATCG\)随便放, 那就是 \((\sum_{i = 0}^{\infty} \frac{x^i}{i!})^4\).

第二个条件是只能放奇数次, 那就是 \((\sum_{i = 0}^{\infty} \frac{x^{2i + 1}}{(2i + 1)!})^4\)

第三个偶数次同理 \((\sum_{i = 0}^{\infty} \frac{x^{2i}}{(2i)!})^4\)

最后答案需要把这三个乘起来, 化简之后就可以得到 : \(\Large(\frac{e^{3x} - e^{-x}}{4})^4\)

继续化简(繁) : \(\frac{1}{256}(e^{12x} - 4e^{8x} + 6e^{4x} + e^{-4x} - 4)\)

由于我们只需要求第\(n\)项的系数就好了,根据第一个公式 : \(\sum_{i = 0}^{\infty} c^i * \frac{x^i}{i!} = e^{cx}\), 式子又可以变成 : \(\frac{1}{256}(12^n - 4 * 8^n + 6 *4 ^ n + (-4)^n)\), 快速幂就好了.

P5396 第二类斯特林数·列

题目链接

我们需要求出一列的斯特林数, 那我们就设多项式\(F_n(x) = \sum_{i=0}^{n} S(i, n) * x^i\)

根据斯特林数的递推公式\(S(n, m) = S(n - 1, m - 1) + S(n - 1, m) * m\)我们可以写出 : \(F_n(x) = x*F_{n-1}(x) + nxF_{n}(x)\)

稍微推一推 :

\[(1-nx)F_n(x) = xF_{n-1}(x) \\ F_n(x) = \frac{x}{1 - nx}F_{n-1}(x) = \dfrac{x^n}{\Pi_{i=1}^n 1 - ix} \]

然后分治做就好啦.

P5395 第二类斯特林数·行

题目链接

\(m^n = \sum_{i=0}^{m}C_m^i \left \{ \begin{array}{l} n\\i \end{array} \right \} i!\)

等式右边表示枚举非空集合的个数, 等式左边是球不同, 盒子也不同, 可空的方案数.

然后我们二项式反演一下 : \(\left \{ \begin{array}{l} n \\ m \end{array}\right \} m! = \sum_{i=0}^{m} (-1)^{m-i}*C_{m}^i *i^n\)

把组合数展开, 同时消去两边的\(m!\) : \(\left \{ \begin{array}{l} n \\ m \end{array}\right \} = \sum_{i=0}^{m} \frac{(-1)^{m-i}}{(m-i)!}*\frac{i^n}{i!}\)

显然这是一个和卷积(其实还有差卷积, 下面会有)的形式, 直接NTT加速就好了.

P4841 [集训队作业2013]城市规划

题目链接

简化题面之后, 就是让你求\(n\)个点的有标号无向连通图个数有多少个(题面里好像有).

\(f_i\)\(i\)个点的答案, \(g_i\)\(i\)个点的图的数量(连不连通都可).

也就是说\(\large g_i = 2^{C_i^2}\). 一个\(i\)个点的完全图有\(C_i^2\)条边, 每条边都可以存在或不存在于当前图中, 于是就有了上式.

考虑单步容斥 :

\[f_n = g_n - \sum_{i=1}^{n-1} C_{n-1}^{i-1}*f_i*g_{n-i} \]

不连通的图的个数就是, 枚举与1这个点在一个连通块内的点, 剩下的点随便.

移项一下 :

\[g_n = \sum_{i=1}^{n} C_{n-1}^{i-1}*f_i*g_{n-i}, g_0 = 1 \]

拆开一下组合数 :

\[\frac{g_n}{(n-1)!} = \sum_{i=1}^{n} \frac{f_i}{(i-1)!}*\frac{g_{n-i}}{(n-i)!} \]

这不和卷积?直接NTT加速就完事了.(对于第0项加上它其实对答案没有影响的)

CF438E The Child and Binary Tree

题目链接

\(f_i\)代表权值为\(i\)的二叉树的个数, \(g_i\)代表权值\(i\)是否出现过, 出现过就是1, 没有就是0.

可以得到 :

\[f_n = \sum_{k} \sum_{i=0}^{n-k} f_i * f_{n-k-i} * g_k, f_0 = 1 \]

设多项式\(F(x) = \sum_{i=0}^{\infty} f_i * x^i\), \(G(x) = \sum_{i=0}^{\infty} g_i * x^i\).

那么又可以得到 :

\[F(x) = F^2(x)G(x) + 1 \\ \]

为啥要+1呢? 因为\(f_0=1\), 而这两个多项式卷起来使得\(f_0=0\)了, 就不对了.

解出\(F(x)\)

\[ F(x) = \frac{1 - \sqrt{1-4G(x)}}{2G(x)} = \frac{4G(x)}{2G(x)(1 + \sqrt{1-4G(x)})} = \frac{2}{1 + \sqrt{1-4G(x)}} \]

然后多项式开根, 多项式求逆就好了.

有个问题就是\(F(x)\)可以解出两个解, 但是\(F(x) = \dfrac{1 + \sqrt{1-4G(x)}}{2G(x)}\)这个解是不收敛的, 所以不取它.(虽然我也不知道为啥, 但是这个用的挺多的, 下面一道题也用到了这个.)不收敛就是说当\(x\)趋于无穷的时候, 它也趋近无穷, 相反它趋于0的话就叫做收敛.

P3978 [TJOI2015]概率论

题目链接

还是设\(f_i\)表示\(i\)个点的二叉树所有情况的叶子节点总数, \(g_i\)表示\(i\)个节点的二叉树的个数.那么最后的答案就是\(\dfrac{f_n}{g_n}\)

首先\(g_i\)很好搞 : \(g_n = \sum_{i=0}^{n - 1}g_i * g_{n-1-i}, g_0 = 1\), 和上一道题差不多.

然后设\(G(x) = \sum_{i=0}^n g_i * x^i\), 那么可以得到 :

\[G(x) = xG^2(x) + 1 \]

解出\(G(x)\), 同样舍去那个不收敛的解.

\[ G(x) = \frac{1 - \sqrt{1-4x}}{2x} \]

\(f_i\)也是一样的 : \(f_n = \sum_{i=0}^{n-1} f_i*g_{n-1-i} + f_{n-1-i}*g_{i}, f_0=0, f_1 = 1\)

\(F(x) = \sum_{i=0}^{\infty} f_i * x^i\), 可以得到 :

\[F(x) = 2xF(x)G(x) + x \]

\(x\)和上一道题同理.

解出\(F(x)\)

\[F(x) = x * (1-4x)^{-\frac{1}{2}} \]

我们又发现有这个东西 :

\[(xG(x))' = (1-4x)^{-\frac{1}{2}} = \frac{F(x)}{x} \]

很神奇对不对? 这样我们就可以找出\(g_i\)\(f_i\)的关系了, 这两个多项式对应项相等, 可以得到 : \(f_n = ng_{n-1}\)

所以 : \(Ans = \dfrac{f_n}{g_n} = \dfrac{ng_{n-1}}{g_n} = \dfrac{n(n+1)}{2(2n-1)}\), 我们就可以\(O(1)\)算啦!

P4389 付公主的背包

题目链接

老套路了 : 设\(f_i\)为恰好装\(i\)体积的商品的.....才怪啊!并不是每道题都要这么做.

考虑生成函数\(F(x) = \Pi_{i=1}^{n}\sum_{j=1}^{\infty} x^{j*v_i}\), 最后第\(x_i\)项的系数就是恰好体积为\(i\)的方案数.

可是这玩意很不好做, 考虑变换一下形式吧. 首先 \(\sum_{j=1}^{\infty} x^{j*v_i} = \dfrac{1}{1-x^{v_i}}\), 这东西用推等比数列求和公式的方法推就好了.

一遍连乘是不好操作的, 但是连乘就是连加, 两遍取个对数就好了, 于是上式就变成了 :

\[ln(F(x)) = \sum_{i=0}^n ln(\dfrac{1}{1-x^{v_i}}) \]

\(\sum\)后边那个东西不好求, 给它变换一下形式, 思路就是先求导, 在积分回去 :

\(ln(\dfrac{1}{1-x^{v_i}})\)

\(= \int (1-x^{v_i})(\sum_{j=0}^{\infty}jv_i*x^{jv_i-1}) \ dx\) (注意复合函数的求导法则)

\(=\int (\sum_{j=0}^{\infty}jv_i*x^{jv_i-1})-(\sum_{j=0}^{\infty}jv_i*x^{(j+1)v_i-1}) dx\)

\(=\int (\sum_{j=0}^{\infty}jv_i*x^{jv_i-1})-(\sum_{j=1}^{\infty}(j-1)v_i*x^{jv_i-1}) dx\)

\(=\int (\sum_{j=1}^{\infty}v_i*x^{jv_i-1}) dx\)

\(= \sum_{j=1}^{\infty} \dfrac{x^{jv_i}}{j}\)

这个形式就很优美了, 所以得到 :

\[ln(F(x)) = \sum_{i=0}^n ln(\dfrac{1}{1-x^{v_i}}) = \sum_{i=0}^n\sum_{j=1}^{\infty} \dfrac{x^{jv_i}}{j} = \sum_{i=0}^n\sum_{j=1}^{\infty} \dfrac{k_i*x^{ji}}{j} \]

\(k_i\)表示体积为\(i\)的商品的数量. 上式直接暴力搞, 复杂度是优美的调和级数.最后直接上多项式exp就可.

P4491 [HAOI2018]染色

题目链接

这回是真的老套路 :

\(\large f_i = C_m^i * C_{n}^{is} * \frac{(is)!}{(s!)^i} * (m-i)^{n-is}\)

\(f_i\)称不上是什么的方案数, 因为有很多重复的, 它的含义是 : 任选\(i\)个颜色填到\(is\)个位置上, 并且有顺序, 所以乘上一个多重集合的组合数, 剩下(n-is)个位置随便填(m-i)中颜色.

\(g_i\)表示出现次数为\(s\)的颜色数恰好有\(i\)个的方案数.

\(up = min(m, n/s)\)

可以得到 : \(f_i = \sum_{j=i}^{up} C_j^i * g_j\)

举个例子 : 在\(f\)中, {a,b,c,d}这个集合在枚举{a,b,c},{a,b,d},{a,c,d},{b,c,d}的时候都被算了一次.

对上式在二项式反演一下 : \(g_i = \sum_{j=i}^{up}(-1)^{j-i}*C_j^i*f_j\) (注意这个和上面有个题的二项式反演不太一样)

还是把组合数拆开 :

\[g_i * i! = \sum_{j=i}^{up}\frac{(-1)^{j-i}}{(j-i)!}*f_j * j! \]

这就转化成了差卷积的形式.但是差卷积具体怎么算呢? 这个东西想了好久, 网上也没有搜到.

\(A_i = \frac{(-1)^{i}}{i!}\), \(B_i = f_i * i!\), 可以得到 :

\[g_i = \dfrac{1}{i!} \sum_{j=1}^{up} A_{j-i} * B_j \]

具体算法就是先把\(B\)数组反转, 然后再像和卷积那么做, \(A_{j-i} * B_{n-j}\), 就得到翻转过后的答案\(Ans_{n-i}\).

P5824 十二重计数法

题目链接

这题有点ex吔

1.球之间互不相同,盒子之间互不相同:

每个球都有\(m\)个位置可以放, 就是\(m^n\).

2.球之间互不相同,盒子之间互不相同,每个盒子至多装一个球:

首先\(n <= m\), 第一个球有\(m\)个盒子可以放, 第二个有\(m-1\)个盒子可以放, 以此类推, 第\(n\)个球有\(m-n+1\)个盒子可以放, 也就是\(m(m-1)(m-2)\dots(m-n+1)\)

3.球之间互不相同,盒子之间互不相同,每个盒子至少装一个球 :

首先\(n>=m\), 然后我们可以枚举空的盒子数\(i\), 那么\(C_m^i * (m-i)^n\)就是空\(i\)个盒子的方案数, 然后稍微容斥一下就可以了 : \(\sum_{i=0}^m = (-1)^i * C_m^i * (m-i)^n\)

4.球之间互不相同,盒子全部相同 :

解决4之前先把6解决了吧.

6.球之间互不相同,盒子全部相同,每个盒子至少装一个球 :

6就是我们说的第二类斯特林数, 上面已经有了第二类斯特林数行和列的求法了, 这里就不再说了.

那么4的话就是\(\sum_{i=0}^{m} S(n,i)\), 因为有盒子可以空嘛, 那我们就枚举不空的盒子数量就好了.

5.球之间互不相同,盒子全部相同,每个盒子至多装一个球 :

没什么好说的, 就是 : \([n \leq m]\)

7.球全部相同,盒子之间互不相同 :

解决7之前先解决9吧.

9.球全部相同,盒子之间互不相同,每个盒子至少装一个球 :

可以理解为把\(n\)个球分成\(m\)份, 可以用隔板法, 也就是在\(n-1\)个空隙里插入\(m-1\)个板子使集合分成\(m\)份, 那么答案就是 : \(C_{n-1}^{m-1}\).

那么7和9的区别就是盒子可空, 还是用隔板法, 但是是把问题转换成了不可空, 如果说我们先往\(m\)个盒子里面都放了一个球, 那么那\(n\)个球怎么放都不会使盒子为空了, 也就是我们现在有了\(n+m\)个球, 那么方案数就是 : \(C_{n+m-1}^{m-1}\)

8.球全部相同,盒子之间互不相同,每个盒子至多装一个球 :

直接找有\(n\)个盒子装球的方案数就好了 : \(C_m^n\)

10.球全部相同,盒子全部相同 :

这个就不太好做了.

我们设\(p(n,m)\)表示\(n\)个球相同, \(m\)个盒子相同, 没有放置限制的方案数是多少.可以得到DP转移方程 :

\(p(n,m) = p(n-m,m) + p(n,m-1)\)

为了使方案不重复, 我们假定每个盒子里放的球数是单调递增的, 那么就可以往\(m\)个盒子里都加一个球, 也可以加一个空的盒子, 这两种都不会改变原来单增的局面.

\(F_m(x) = \sum_{i=0}^{m} p(i,m) x^i\), 可以得到 :

\[F_m(x) = x^mF_m(x) + F_{m-1}(x) \\ F_m(x) = \frac{1}{1 - x^m} F_{m-1}(x) = \sum_{i=1}^m \frac{1}{1 - x^i} \]

这样就转化成付公主的背包那个题了.

11.球全部相同,盒子全部相同,每个盒子至多装一个球 :

直接判断\([n <= m]\)就好了.

12.球全部相同,盒子全部相同,每个盒子至少装一个球 :

类似于7, 把至少装一个球转化成可空, 我们把每个盒子里先垫上一个球, 那么所有盒子肯定都合法了, 所以剩下的\(n-m\)个球按照10的做法就好了, 也就是\(p(n-m,m)\).

posted @ 2021-03-16 22:02  C锥  阅读(189)  评论(1编辑  收藏  举报