二项式反演

二项式反演

常见形式:

\[\begin{aligned} f_n=\sum_{i=0}^{n}(-1)^i\binom{n}{i}g_i &\Leftrightarrow g_n=\sum_{i=0}^{n}(-1)^i\binom{n}{i}f_i &(0) \\ f_n=\sum_{i=0}^{n}\binom{n}{i}g_i &\Leftrightarrow g_n=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}f_i &(1) \\ f_n=\sum_{i \ge n}\binom{i}{n}g_i &\Leftrightarrow g_n=\sum_{i \ge n}(-1)^{i-n}\binom{i}{n}f_i &(2) \end{aligned} \]

本质:把 \(f,g\) 数组看成两个向量,中间的转移系数看成矩阵,那么左右两边式子的系数的矩阵互为逆矩阵。

二项式反演也可以看作是一种特殊的容斥,作用往往在于将 恰好 转化为 钦定

P6478 [NOI Online #2 提高组] 游戏

二项式反演经典入门例题

注意到要计数的是恰好 \(k\) 次平局的方案数,设 \(f_i\) 表示恰好 \(i\) 次非平局的方案数,\(g_i\) 表示钦定了 \(i\) 次非平局的方案数。

\[f_k=\sum_{i=k}^{m}(-1)^{i-k}\binom{i}{k}g_i \Leftrightarrow g_k=\sum_{i=k}^{m}\binom{i}{k}f_i \]

现在要求的是树上钦定了 \(k\) 对祖孙关系的方案数,考虑设 \(h_{x,i}\) 表示 \(x\) 的子树内钦定了 \(i\) 对祖孙关系的方案数。合并两个子树就类似卷积形式暴力合并,以及对新加的根节点看是否会新增一对祖孙关系即可。剩下 \(m-k\) 对点可以随意匹配(只钦定了 \(k\) 对非平局,剩下的随便选),那么有:

\[g_k=f_{1,k}(m-k)! \]

最后再套二项式反演即可。

弱化版:

P4859 已经没有什么好害怕的了

P5400 [CTS2019] 随机立方体

概率转计数,依旧将恰好转化为钦定,设 \(f_k\) 表示恰好 \(k\) 个极大数的方案数,\(g_k\) 表示钦定 \(k\) 个的方案数,那么有反演 \(1\) 形式。设 \(S(x)=(n-x)(m-x)(l-x)\)

注意到 \(k\) 个极大数都会影响到 \(k\)\(k\)\(k\) 个纵截面,那么剩下的位置可以随便填。

再拆式子:

\[g_i=\dfrac{nml}{(n-i)!(m-i)!(l-i)!}\times\dfrac{nml}{(nml-S(i))!}\times h_i \]

第一部分表示选出 \(i\) 个位置作为极大值的坐标的方案数,第二部分表示其他无关位置随便标号的方案数,那么我剩下没有考虑到的是被极大影响的位置(包括自身)的值标号的方案数。

不妨从按极大坐标的值从大到小考虑,那么被影响的点的限制会越来越紧,方便计算。

设当前考虑到了第 \(j\) 个极大坐标,显然它是所有未填取数中的最大值,只能选取最大的那个值,那剩下哪些只跟当前最大值有关联的坐标(即当前只需小于第 \(j\) 个极大坐标),配合上当前还没填的个数的总数,可以得到将这些坐标填值的方案数。

具体而言,假设当前还剩下 \(w\) 个数未填(极大坐标不算入),当前只跟最大值有关联的坐标有 \(x\) 个,那么方案数为:\(w^{\underline x}\)

需要填的个数是 \(S(j-1)-S(j)-1\)(不被前 \(j-1\) 个极大坐标影响的位置减去不被前 \(j\) 大极大坐标影响的位置再减去第 \(j\) 个极大坐标),还剩的总点数是 \(S(0)-S(j-1)-1\)

那么有:

\[\begin{aligned} h_i&=\prod_{j=1}^{i}\dfrac{(S(0)-S(j-1)-1)!}{(S(0)-S(j-1)-1-(S(j-1)-S(j)-1))!} \\ &=(S(0)-S(i)-1)!\prod_{j=1}^{i-1}\dfrac{1}{S(0)-S(j)} \\ g_i&=\dfrac{nml}{(n-i)!(m-i)!(l-i)!}\times\dfrac{nml}{(S(0)-S(i))!}\times (S(0)-S(i)-1)! \prod_{j=1}^{i-1}\dfrac{1}{S(0)-S(j)} \\ g_i&=\dfrac{nml}{(n-i)!(m-i)!(l-i)!}(nml)!\prod_{j=1}^{i}\dfrac{1}{S(0)-S(j)} \\ ans&=\frac{f_k}{(nml)!}=\dfrac{1}{(nml)!}\sum_{i\ge k}(-1)^{i-k}\binom{i}{k}\dfrac{nml}{(n-i)!(m-i)!(l-i)!}(nml)!\prod_{j=1}^{i}\dfrac{1}{S(0)-S(j)} \\ ans&=\sum_{i\ge k}(-1)^{i-k}\binom{i}{k}\dfrac{nml}{(n-i)!(m-i)!(l-i)!}\prod_{j=1}^{i}\dfrac{1}{S(0)-S(j)} \end{aligned} \]

注意到最多只有 \(\min(n,m,l)\) 个极大值位置,所有直接求出每一项即可。

但是本题范围较大,不支持每次 \(O(\log n)\) 求逆元。

\(\text{trick}\):考虑类似与求阶乘逆元那样预处理出所有数相乘的逆元,再倒着往回推就可以得到每个数的逆元了,复杂度就降到了线性。

P4831 Scarlet loves WenHuaKe

牛牛题,介绍一个不需要多项式的做法。

首先显然每行恰好只有两个棋子。

转换:有编号为 \(1\sim m\) 的球各两个,求所有多少种方案放入 \(n\) 对无序二元组且二元组内两数不同。设方案数为 \(f(n,m)\)

先忽略一些棘手的限制,设 \(g(n,m)\) 表示将这 \(2\times m\) 个球放到 \(2\times n\) 个格子中的方案数。

如何计算 \(g\) ?考虑先枚举二元组内的两数相同的数量,再用不同的数补空。

\[g(n,m)=(2n)!\sum_{i=0}^{\min(m-n,n)}\dfrac{\binom{m}{n-i}\binom{m-n+i}{2i}}{2^{n-i}} \]

大概意思是 \(\binom{m}{n-i}\) 的意思是枚举相同对数 \(n-i\) 的方案数,\(\binom{m-n+1}{2i}\) 表示从剩下的 \(m-n+i\) 个颜色球中选 \(2i\) 个数。\((2n)!\) 因为是有标号计数,再除掉相同数字的交换次序 \(2^{n-i}\)

再思考如何用 \(f\) 表示 \(g\),注意到 \(g\) 其实是计数 \(n\) 对有序二元组的数量。

那么考虑枚举选了多少对二元组用了相同的数组,再选一些颜色的球放进去,剩下的就再将有序变成无序,即可得到:

\[g(n,m)=\sum_{i=0}^{n}\binom{n}{i}\dfrac{m!}{(m-i)!}2^{n-i}f(n-i,m-i) \]

长得很像二项式反演!但是多了些杂项。

\[\dfrac{g(n,m)}{m!}=\sum_{i=0}^{n}\binom{n}{i}\dfrac{2^{n-i}f(n-i,m-i)}{(m-i)!} \]

注意到整个式子中,使用到的 \(f,g\) 中的 \(n,m\) 的差值始终不变,考虑换元。

\[\begin{aligned} G_i&=\dfrac{g(i,i-n+m)}{(i-n+m)!} \\ F_i&=\dfrac{2^if(i,i-n+m)}{(i-n+m)!} \\ G_n&=\sum_{i=0}^{n}\binom{n}{i}F_{n-i} \\ G_n&=\sum_{i=0}^{n}\binom{n}{i}F_i \Leftrightarrow F_n=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}G_i \\ F_n&=\sum_{i=0}^{n}(-1)^i\binom{n}{i}G_{n-i} \\ \dfrac{2^nf(n,m)}{m!}&=\sum_{i=0}^{n}(-1)^i\binom{n}{i}\dfrac{g(n-i,m-i)}{(m-i)!} \\ f(n,m)&=\dfrac{m!}{2^n}\sum_{i=0}^{n}(-1)^i\binom{n}{i}\dfrac{g(n-i,m-i)}{(m-i)!} \end{aligned} \]

注意到算 \(g(n,m)\) 的复杂度是 \(O(\min(m-n,n))\) 的,一共计算 \(n\) 次,复杂度为 \(O(\min(m-n,n)n)\),刚好满足题目数据。

P5401 [CTS2019] 珍珠

Nit 钦定的题目,确实比较牛。

设颜色为 \(k\) 的个数为 \(c_k\),方案合法要满足:

\[\begin{aligned} \sum_{k=1}^{D}\lfloor \frac{c_k}{2} \rfloor &\ge m \\ \sum_{k=1}^{D}c_k-c_k \text{ mod }2 &\ge 2m \\ \sum_{k=1}^{D}c_k \text{ mod }2 &\le n-2m \end{aligned} \]

\(D\le n-2m\)\(n-2m \le 0\) 的情况是简单的,答案分别是 \(D^n\)\(0\)

\(f_i\) 表示恰好有 \(i\)\(c_k\) 为奇数的方案数,依旧将恰好转钦定,设 \(g_i\) 表示钦定了 \(i\)\(c_k\) 为奇数的方案数。

\[\begin{aligned} ans&=\sum_{i=0}^{n-2m}f_i \\ f_i&=\sum_{j\ge i}\binom{j}{i}(-1)^{j-i}g_j \end{aligned} \]

如果计算出 \(g\) 那么可以卷积得到 \(ans\),那么现在可以转化为算 \(g\)

考注意到所有出现次数为奇数的排列方案数 \(x\)\(\text{EGF}\)\(\dfrac{e^x-e^{-x}}{2}\),出现次数任意的排列方案数的 \(\text{EGF}\)\(e^x\)

\[\begin{aligned} g_k&=[\dfrac{x^n}{n!}]\binom{D}{k}(\frac{e^x-e^{-x}}{2})^k(e^x)^{D-k} \\ &=[\dfrac{x^n}{n!}]\binom{D}{k}\dfrac{1}{2^k}(e^x)^{D-k}\sum_{j=0}^{k}(-1)^j\binom{k}{j}(e^x)^{k-2j} \\ &=\dfrac{1}{2^k}\dfrac{D!}{k!(D-k)!}[\dfrac{x^n}{n!}]\sum_{j=0}^{k}(-1)^j\dfrac{k!}{j!(k-j)!}e^{(D-2j)x} \end{aligned} \]

又有 \(\text{EGF}\) 公式:

\[\sum_{i\ge0}\dfrac{c^ix^i}{i!}=e^{cx} \]

那么有:

\[\begin{aligned} g_k&=\dfrac{1}{2^k}\dfrac{D!}{k!(D-k)!}\sum_{j=0}^{k}(-1)^j\dfrac{k!}{j!(k-j)!}(D-2j)^n \\ &=\frac{D!}{(D-k)!2^k}\sum_{j=0}^{i}\dfrac{(-1)^j(D-2j)^n}{j!}\dfrac{1}{(i-j)!} \end{aligned} \]

注意到式子仍然是一个卷积形式,卷起来即可!

posted @ 2024-04-26 08:46  Hanghang007  阅读(121)  评论(0编辑  收藏  举报