zoukankan      html  css  js  c++  java
  • 「总结」多项式生成函数例题(1)

    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=0}^{n}inom{n}{i}sumlimits_{j=0}^{k}egin{Bmatrix}k\jend{Bmatrix}i^{underline j}\ &=sumlimits_{i=0}^{n}sumlimits_{j=0}^{k}egin{Bmatrix}k\jend{Bmatrix}inom{n}{i}inom{i}{j}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-j}{i-j}\ &=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}\ egin{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))求出一行的第二类斯特林数。
    那么把斯特林数代入上面的式子一起卷积即可。

  • 相关阅读:
    82.Java集合学习之Collections与Arrays
    81.Java集合之TreeMap
    vuex 封装
    async awiat
    纯前端导入导出
    使用node搭建服务器
    node.js
    axios请求拦截器
    数据结构学习第十九天
    数据结构学习第十八天
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12024175.html
Copyright © 2011-2022 走看看