其他分享
首页 > 其他分享> > 生成函数

生成函数

作者:互联网

高维生成函数

例子:

二维生成函数的形式幂级数:\(F = \sum_{i = 0}^n\sum_{j = 0}^ma_{i,j}x^iy^j\)

考虑对其卷积:

\[A * B = C = \sum_{i = 0}^{A_n}\sum_{i = 0}^{A_m}a_{i , j}x^iy^j\sum_{i = 0}^{B_n}\sum_{i = 0}^{B_m}b_{i , j}x^iy^j\\ \sum_{Cx_i = 0}^{A_n + B_n}\sum_{Cy_i = 0}^{A_m + B_m}x^{Cx_i}y^{Cx_i}\sum_{Ax_i + Bx_i = Cx_i}\sum_{Ay_j + By_j = Cx_j} (\frac{Cx_i}{Ax_i})(\frac{Cy_i}{Ay_i})a_{Ax_i,Ay_i}b_{Bx_i,By_i} \]

​ 上面的式子没什么用

经过一些推到有以下结论:

对各个维度单独做一个DFT,然后再相应点乘起来,最后再对每一个维度IDFT回去,便可以得到原卷积

对于二维:

可以先枚举第一维,然后对每一个第二维DFT

在上一维度的结构:再枚举第二维,然后对每一个第一维DFT一下

最后将点相应点乘起来

最后再枚举第二维,然后对于每一个第一维IDFT

再枚举第一维,然后对每一个第二维IDFT一下

最后就是卷积答案

复杂度大概是\(O(n^mlogn)\)

更多的例子:FWT,FMT (本质上就是一个高维插值)

例题:[十二省联考 2019] 皮配

记号:

\[S = \sum_{i}s_i\\ \]

建出这样一张图:

image-20220318211920287

不妨将第一行人数设为一个维度\(x\),第一列人数设为第二个维度\(y\)

然后就有了一下这个矩形:

image-20220318212251402

那么原题目的若干限制就可以表示为若干个\(x,y\)相关的区间

然后就是要求出相关的二元生成函数了

考虑对于每一个城市的学校\(\{s_1,s_2,...,s_l\}\)

每个学校要么选择第一行,要么选择第二行

\[容易列出如下式子:\\ \prod(x^{s_i}y^{s_i} + x^s) +\prod(y^{s_i} + 1)\\ 即: (\prod(x^{s_i} + 1) + 1)(\prod(y^{s_i} + 1)) \]

此时\(x,y\)分别独立

对于有限制的学校也一样这么做即可


生成函数杂题:

CF986D

image-20220318214113006

首先有个显然的结论:

\[2至多出现两次\\ 其余出现的只有3\\ 感性证明:\\ 4可以由两个2表示\\ 5可以由3 + 2表示,且3 * 2 > 5\\ . . . \]

分别枚举一下2的个数

标签:函数,DFT,sum,生成,枚举,Cx,维度,prod
来源: https://www.cnblogs.com/Yeyuqing0913/p/16023768.html