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

Posted lrefrain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「总结」多项式生成函数例题相关的知识,希望对你有一定的参考价值。

1.礼物
先给你们来个简单点的。
http://hzoj.com/contest/220/problem/1
那么其实就是在求最小的:
[egin{array}{rcl}ans&=&sumlimits_{i=1}^{n}(x_i-y_i+c)^2\\&=&sumlimits_{i=1}^{n}(x_i-y_i)^2+2(x_i-y_i)c+c^2end{array}]
可以发现贡献分成了两部分。
一部分的变量是(c)另一部分是(x,y)
这样分别计算最小值即可。
右边的那个直接带入(cin[-100,100])即可。
左边的再接着化式子。
[sumlimits_{i=1}^{n}x_i^2+y_i^2-2x_iy_i]
前面的可以直接求。
只需要求后面的部分:
[sumlimits_{i=1}^{n}x_iy_i]
的最大值。
[sumlimits_{i=1}^{n}x_{(i+k)mod n}y_i]
发现卷积的影子了。
我们将(y)复制一次接到后面,(x)直接翻转。
做一次多项式乘法。
(i+n)项的系数,就是错位(i)次之后的乘法值。
这样问题就在(O(nlogn))复杂度内解决了。

2.染色
http://hzoj.com/contest/126/problem/9
题解直接丢链接:https://www.cnblogs.com/Lrefrain/p/11644603.html

3.城市规划
http://hzoj.com/contest/126/problem/10
这个题其实也不难。
首先根据一个套路我们枚举和(1)在同一个联通块内的点的个数。
这样可以得到一个补集容斥的式子:
[dp[n]=2^{inom{n}{2}}-sumlimits_{i=1}^{n-1}inom{n-1}{i-1}2^{inom{n-i}{2}}dp[i]]
随便化一下出卷积式就行了。
但是发现是自己卷自己。
分治(FFT)解决。
这个分治很简单自己去(yy)吧。

4.图的价值
http://hzoj.com/contest/126/problem/11
鉴于大部分人都不会斯特林数。
这里给出一个公式:
[x^m=sumlimits_{i=0}^{m}egin{Bmatrix}m\\iend{Bmatrix}x^{underline i}]

然后愉快的开始推式子吧!
首先考虑每个点的贡献,就可以得到如下的答案:
[ans=n2^{inom{n-1}{2}}sumlimits_{i=1}^{n-1}inom{n-1}{i}i^k]
[F(n)=sumlimits_{i=1}^{n}inom{n}{i}i^k]
[egin{aligned}F(n)&=sumlimits_{i=1}^{n}inom{n}{i}i^k&=sumlimits_{i=1}^{n}inom{n}{i}sumlimits_{j=0}^{k}egin{Bmatrix}k\\jend{Bmatrix}i^{underline j}&=sumlimits_{i=1}^{n}sumlimits_{j=0}^{k}egin{Bmatrix}k\\jend{Bmatrix}inom{n}{i}inom{j}{i}j!&=sumlimits_{j=0}^{k}j!egin{Bmatrix}k\\jend{Bmatrix}sumlimits_{i=0}^{n}inom{n}{i}inom{i}{j}&=sumlimits_{j=0}^{k}j!egin{Bmatrix}k\\jend{Bmatrix}sumlimits_{i=0}^{n}inom{n}{j}inom{n-i}{j-i}&=sumlimits_{j=0}^{k}j!egin{Bmatrix}k\\jend{Bmatrix}inom{n}{j}2^{n-j}&=sumlimits_{j=0}^{k}j!frac{n!}{j!(n-j)!}2^{n-j}egin{Bmatrix}k\\jend{Bmatrix}&=n!sumlimits_{j=0}^{k}frac{2^{n-j}}{(n-j)!}egin{Bmatrix}k\\jend{Bmatrix}\\end{aligned}]
卷积形式出现了。
现在还有一个问题。
第二类斯特林数怎么求?
第二类斯特林数(egin{Bmatrix}n\\kend{Bmatrix})的含义是,(n)个物品分成(k)个没有标号的集合的方案数,保证集合非空。
这样我们就可以考虑容斥出这个东西。
考虑二项式反演。
我们一共有(n)个元素和(k)个集合,来模拟划分的过程来满足0个非空这个条件。
我们设(g(m))为划分中至少(m)个空集合的方案数,(f(m))为恰好有(m)个。
[g(m)=inom{k}{m}(k-m)^n]
[g(m)=sumlimits_{i=m}^{k}inom{k}{i}f(i)]
二项式反演得到:
[f(m)=sumlimits_{i=m}^{k}(-1)^{i-m}inom{k}{i}g(i)]
[f(0)=sumlimits_{i=0}^{k}(-1)^iinom{k}{i}(k-i)^m]
那么:
[egin{aligned}\\begin{Bmatrix}n\\kend{Bmatrix}&=frac{f(0)}{k!}&=frac{1}{k!}sumlimits_{i=0}^{k}(-1)^kinom{k}{i}(k-i)^m&=frac{1}{k!}sumlimits_{i=0}^{k}(-1)^kfrac{k!}{i!(k-i)!}(k-i)^m&=sumlimits_{i=0}^{j}frac{(-1)^i}{i!}frac{(k-i)^m}{(k-i)!}\\end{aligned}]
这样也是卷积了。
可以(O(nlogn))求出一行的第二类斯特林数。
那么把斯特林数代入上面的式子一起卷积即可。

以上是关于「总结」多项式生成函数例题的主要内容,如果未能解决你的问题,请参考以下文章

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

「总结」多项式生成函数相关

「总结」多项式生成函数相关

生成函数入门

生成函数

luoguP5748 集合划分计数 指数型生成函数+多项式exp