容斥相关

二项式反演

基本定义

\(f(n)\) 表示在恰好选择 \(n\) 个不同元素满足某种条件的方案数,\(g(n)\) 表示在 \(n\) 个不同元素选择任意个满足该条件的方案数。那么对于 \(f\)\(g\) 的关系有下式。

\[g(n)=\sum\limits_{i=0}^n\dbinom{n}{i}f(i) \]

但是现在的问题是我们可以快速计算 \(g\),而我们要求得 \(f\)

我们发现上式和二项式定理有很大的相似性,我们不妨从这方面入手。

\[(x+1)^n=\sum\limits_{i=0}^n\binom{n}{i}x^i \]

这是二项式定理的基本形式。现在我们来试试能不能用 \((x+1)^i\) 来表示 \(x^n\)

\[x^n=(x+1-1)^n=\sum\limits_{i=0}^n\binom{n}{i}(-1)^{n-i}(x+1)^i \]

然后换元,令 \(f(n)=x^n,g(n)=(x+1)^n\),我们得到了一组二项式反演的基本形式。

\[\begin{cases} g(n)=\sum\limits_{i=0}^n\dbinom{n}{i}f(i)\\ f(n)=\sum\limits_{i=0}^n\dbinom{n}{i}(-1)^{n-i}g(i) \end{cases} \]

当然,我们现在只说明了对于特定形式该定理成立,现在我们要进一步证明其对于任意 \(f,g\) 均成立。

考虑将下式代入上式并做化简,我们可以得到如下式子。

\[\begin{aligned} g(n)&=\sum\limits_{i=0}^n\dbinom{n}{i}\sum\limits_{j=0}^i\dbinom{i}{j}(-1)^{i-j}g(j)\\ &=\sum\limits_{j=0}^ng(j)\sum\limits_{i=j}^n\dbinom{n}{i}\dbinom{i}{j}(-1)^{i-j}\\ &=\sum\limits_{j=0}^ng(j)\dbinom{n}{j}\sum\limits_{i=j}^n\dbinom{n-j}{i-j}(-1)^{i-j} \end{aligned} \]

而由于后面的式子仅在 \(j=n\) 时为 \(1\),故原式可进一步化简为下式。

\[\begin{aligned} g(n)&=\sum\limits_{j=0}^ng(j)\dbinom{n}{j}\sum\limits_{i=j}^n\dbinom{n-j}{i-j}(-1)^{i-j}\\ &=\sum\limits_{j=0}^ng(j)\dbinom{n}{j}[n=j]\\ &=g(n) \end{aligned} \]

证毕。

二项式反演还有更常见的表示形式。

\[\begin{cases} g(i)=\sum\limits_{j=i}^n\dbinom{j}{i}f(j)\\ f(i)=\sum\limits_{j=i}^n\dbinom{j}{i}(-1)^{j-i}g(j) \end{cases} \]

例题

P1595

考虑二项式反演,令 \(f(n)\) 表示恰好有 \(i\) 个人位置站错的方案数,\(g(n)\) 表示 \(n\) 个人任意排列的方案数,显然有 \(g(n)=n!\)。然后套二项式反演即可得到 \(f(n)=\sum\limits_{i=0}^n\dbinom{n}{i}(-1)^{n-i}n!\),容易线性计算。

染色问题

\(n\) 个格子染 \(k\) 种颜色,每种颜色出现至少一次,相邻格子颜色互不相同,求方案数。

\(f(k)\) 表示用 \(k\) 种颜色每种至少出现一次的方案数,\(g(k)\) 表示用 \(k\) 种颜色不限制出现次数的总方案数,显然有 \(g(k)=k(k-1)^{n-1}\),且 \(g(k)=\sum\limits_{i=0}^k \dbinom{k}{i}f(i)\)。套二项式反演,\(f(k)=\sum\limits_{i=0}^k\dbinom{k}{i}(-1)^{k-i}g(i)\)

P4491

考虑二项式反演。首先考虑钦定 \(i\) 个颜色出现了恰好 \(S\) 次,剩下的颜色任选的方案数,令其为 \(g(i)\),分成两部分考虑,首先考虑没被钦定的颜色,相当于是 \(m-i\) 种颜色随意填到 \(n-iS\) 个空位中,方案数是 \((m-i)^{n-iS}\),然后考虑钦定的颜色,首先要在所有颜色中选择 \(i\) 个,那么是 \(\dbinom{m}{i}\),然后在集合里填上 \(n-iS\) 个占位颜色,那么变成了一个长度为 \(n\) 的可重排列计数,那么方案数是 \(\dfrac{n!}{(S!)^i(n-iS)!}\)。整理一下即可得到 \(g(i)\) 的表达式。

\[g(i)=\dbinom{m}{i}\dfrac{n!}{(S!)^i(n-iS)!}(m-i)^{n-iS} \]

然后考虑二项式反演,设 \(f(i)\) 为恰好 \(i\) 种的方案数。

那么有 \(g(i)=\sum\limits_{j=i} \dbinom{j}{i}f(j)\)。上二项式反演,那么有 \(f(i)=\sum\limits_{j=i}\dbinom{j}{i}(-1)^{j-i}g(j)\)

拆开组合数,然后合并并化简,即可得到下式。

\[\begin{aligned} f(i)\times i!&=\sum\limits_{j=i}\dfrac{j!}{(j-i)!}(-1)^{j-i}g(j)\\ f(i)\times i!&=\sum\limits_{j=i}\dfrac{(-1)^{j-i}}{(j-i)!}\times j!g(j) \end{aligned} \]

很明显的卷积形式,对右式 NTT 即可。

Min-Max 容斥

基本定义

下文中令一个集合 \(S\) 中的最小值为 \(\min(S)\),最大值为 \(\max(S)\)\(k\) 大值为 \(\max(k,S)\)\(k\) 小值为 \(\min(k,S)\)

假设我们现在有一个全集 \(U=\{a_1,a_2,\cdots,a_n\}\)。且我们能快速的对于一个子集 \(S\subseteq U\) 求出 \(\min(S)\)。现在我们要对一个集合 \(S\subseteq U\),求出 \(\max(S)\)。Min-Max 容斥能够帮助我们解决这一类问题。

oi-wiki 给了一个很巧妙的推导,故记录在下面。

我们考虑将这种怪异的容斥向正常的容斥进行映射。考虑构造函数 \(f:A_x\rightarrow \{1,2,\cdots,x\}\),其中 \(A_x\)\(U\) 中的第 \(k\) 大值。显然上述映射是一个双射,且有 \(f(\min(x,y))=f(x)\cap f(y),f(\max(x,y))=f(x)\cup f(y)\)

注意到每个集合可以用其大小区分,那么对集合大小进行容斥,我们有如下式子。

\[\begin{aligned} \vert f(\max(S))\vert&=\vert\bigcup\limits_{x\in S} f(x)\vert\\ &=\sum\limits_{T\subseteq S} (-1)^{\vert T\vert+1}\vert \bigcap\limits_{x\in T} f(x)\vert\\ &=\sum\limits_{T\subseteq S} (-1)^{\vert T\vert+1}\vert f(\min(T))\vert \end{aligned} \]

那么我们再把集合映射回数字,故得到了 Min-Max 容斥的基本形式。

\[\max(S)=\sum\limits_{T\subseteq S} (-1)^{\vert T\vert+1}\min(T) \]

同时也可以写出将 \(\min(S)\) 容斥为 \(\max(S)\) 的形式。

\[\min(S)=\sum\limits_{T\subseteq S} (-1)^{\vert T\vert+1}\max(T) \]

不加证明的,Min-Max 容斥在期望意义下也成立。

\[E(\max(S))=\sum\limits_{T\subseteq S} (-1)^{\vert T\vert+1}E(\min(T)) \]

Min-Max 容斥还有更强的形式,即把 \(k\) 大值容斥为最小值。

受上面的启发,我们仍然试图将其写为一个和式\(\max(k,S)=\sum\limits_{T\subseteq S} f(T)\min(T)\) 的形式。其中 \(f(T)\) 是一个和 \(T\) 相关的函数。我们的目标即为推出容斥系数。

考虑对于第 \(x\) 小,其对答案有贡献是什么情况,即从集合中选出若干个不小于 \(x\) 的数,不选小于 \(x\) 的数,后者共有 \(x-1\) 个。设其贡献为 \(v_x\),则有下式。

\[v_x=\sum\limits_{i=0}^{n-x} \dbinom{n-x}{i} f(i+1) \]

那么我们要求 \(v_x=[x=n-k+1]\),也就是说满足下式。

\[\sum\limits_{i=0}^{n-x} \dbinom{n-x}{i} f(i+1)=[x=n-k+1]=[n-x=k-1] \]

换元后上二项式反演,即可得到下式。

\[\begin{aligned} \sum\limits_{i=0}^{x} \dbinom{x}{i} f(i+1)&=[x=k-1]\\ f(x+1)&=\sum_{i=0}^x\dbinom{x}{i}(-1)^{x-i}[i=k-1]\\ f(x+1)&=\dbinom{x}{k-1}(-1)^{x-k+1}\\ \end{aligned} \]

整理一下,即可得到 \(f(x)=\dbinom{x-1}{k-1}(-1)^{x-k}\)。带回原式,我们即可得到扩展 Min-Max 反演的基本形式。

\[\max(k,S)=\sum\limits_{T\subseteq S} \dbinom{\vert T\vert-1}{k-1}(-1)^{\vert T\vert-k}\min(T) \]

这个式子在期望意义下也成立,即有下式。

\[E(\max(k,S))=\sum\limits_{T\subseteq S} \dbinom{\vert T\vert-1}{k-1}(-1)^{\vert T\vert-k}E(\min(T)) \]

而我们可以通过类背包的 dp 等手段处理出后面的东西,这就是 Min-Max 容斥的威力!

例题

P4707

这个猛。感觉难点在于想到可以做 Min-Max 容斥,后面 dp 设计状态和拆组合数的那一步也很精彩。

考虑此时的 \(\min(T)\) 的实际含义,那么应该是 \(T\) 中的所有原料出现一种的期望时间,而题目所求即为 \(\min(k,U)\),其中 \(U\) 为全集,稍微转化一下,令 \(k\leftarrow n-k+1\) 变成 \(\max(k,U)\)

注意到我们实际上是可以快速求 \(\min(T)\) 的,设 \(T=\{a_1,a_2,\cdots,a_t\}\),那么做一次的概率 \(P(\min(T))=\dfrac{\sum\limits_{x\in T} p_x}{m}\),然后得到 \(E(\min(T))=\dfrac{m}{\sum\limits_{x\in T} p_x}\)

还记得那个式子在期望意义下成立吗?那么我们套上 Min-Max 反演,那么有下面的式子。

\[E(\max(k,U))=\sum\limits_{T\subseteq U} \dbinom{\vert T\vert-1}{k-1}(-1)^{\vert T\vert-k}\dfrac{m}{\sum\limits_{x\in T} p_x} \]

考虑 dp。观察原式子中哪些东西需要塞到状态里。注意到一个有趣的事情是对于固定的集合大小,其前面的系数总是固定的,所以我们可以枚举集合大小后把后面那一坨组合数和系数丢到前面,最后乘回去。所以上来有一个 naive 的想法是设 \(f(i,j,k)\) 表示当前考虑到第 \(i\) 个数,\(\vert T\vert=j\)\(\sum\limits_{x\in T} p_x=k\) 的方案数,有转移方程 \(f(i,j,k)=f(i-1,j,k)+f(i-1,j-1,k-p_i)\)。这样得到了一个 \(O(n^2m)\) 的做法。

考虑优化状态。注意到 \(i,k\) 两维必须记录,我们考虑把 \(j\) 压掉,也就是说,我们要对 \(\sum\limits_{T\subseteq U} \dbinom{\vert T\vert-1}{k-1}(-1)^{\vert T\vert-k}\) 这样子的系数求和。

继续考虑转移,延续上面的想法,我们试图构建一个 \(f(i,k)=af(i-1,k)+bf(i-1,k-p_i)\) 式的转移方程。第一部分显然有 \(a=1\),接下来考虑第二部分。

考虑把一个数加入集合以后变成了什么,首先一定会让系数乘上 \(-1\),然后考虑组合数部分,会变成 \(\dbinom{\vert T\vert}{k-1}\)。然后怎么做?\(\dbinom{\vert T\vert-1}{k-1}\rightarrow \dbinom{\vert T\vert}{k-1}\) 这种东西?组合数递推!

那么我们再加一维 \(j\),含义为上面式子中的 \(k\) 是多少(注意不要跟上面的 \(\sum\limits_{x\in T} p_x=k\) 混淆),那么转移即为 \(f(i,j,k)=f(i-1,j,k)-f(i-1,j,k-p_i)+f(i-1,j-1,k-p_i)\)。注意最后那一项两个系数上的 \(-1\) 抵消。

初始状态是 \(f(0,x,0)=[x=0]-1\)。没有明确的意义,实际上可以看作是为了统计答案凑的系数。

单位根反演

基本定义

先摆式子。

\[[n\mid k]=\frac{1}{n}\sum\limits_{i=0}^{n-1}\omega_n^{ik} \]

在这里给一种比较优美的证明方式。

首先考虑 \(n\)\(k\) 的约数,此时 \(ik\) 一定是 \(n\) 的倍数,所以 \(\omega^{ik}_n=\omega^{0}_n=1\),所以上式显然成立。

然后考虑 \(n\) 不为 \(k\) 的约数,令 \(d=\gcd(k,n)\),令 \(n'=\dfrac{n}{d},k'=\dfrac{k}{d}\)。根据单位根的性质,\(\omega^{ik}_n=\omega^{ik'}_{n'}\)。而此时显然有 \(n'\perp k'\),所以 \(\sum\limits_{i=0}^{n'-1}\omega_{n'}^{ik'}=0\),而求和到 \(n\) 相当于在式子前乘上 \(d\),故答案仍为 \(0\)

例题

P5591

整除下取整我们是不好做的,我们考虑把整除拆掉,\(\lfloor\dfrac{i}{k}\rfloor=\dfrac{i-i\bmod k}{k}\)

拆掉以后开始化简原式,不难得到下面的式子。

\[\begin{aligned} \sum\limits_{i=0}^n\dbinom{n}{i}p^i\lfloor\dfrac{i}{k}\rfloor&=\sum\limits_{i=0}^n\dbinom{n}{i}p^i\dfrac{i-i\bmod k}{k}\\ &=\frac{1}{k}[\sum\limits_{i=0}^n\dbinom{n}{i}p^i i-\sum\limits_{i=0}^n\dbinom{n}{i}p^i (i \bmod k)]\\ \end{aligned} \]

先把 \(\dfrac{1}{k}\) 拿掉,我们观察化简后的式子,分成两部分考虑。注意到第一部分拿掉 \(i\) 以后就是二项式定理,那么考虑把 \(i\) 放进组合数里。有组合恒等式 \(\dbinom{n}{i}i=\dfrac{n!}{(i-1)!(n-i)!}=n\dfrac{(n-1)!}{(i-1)!(n-i)!}=n\dbinom{n-1}{i-1}\),然后回代以后提取系数 \(np\),变成纯正二项式定理。然后考虑第二部分,我们试图将其搞成一个可以单位根反演的形式。

\[\begin{aligned} \sum\limits_{i=0}^n\dbinom{n}{i}p^i (i \bmod k)&=\dfrac{1}{k}\sum\limits_{i=0}^n\dbinom{n}{i}p^i\sum\limits_{j=0}^{k-1}j[i\bmod k=j] \end{aligned} \]

后面的东西显然可以单位根反演,同样拿掉系数,反演后化简可以得到下式。

\[\begin{aligned} \sum\limits_{i=0}^n\dbinom{n}{i}p^i\sum\limits_{j=0}^{k-1}j[i\bmod k=j]&=\sum\limits_{i=0}^n\dbinom{n}{i}p^i\sum\limits_{j=0}^{k-1}j\sum\limits_{t=0}^{k-1}\omega_k^{t(i-j)}\\ &=\sum\limits_{j=0}^{k-1}j\sum\limits_{t=0}^{k-1}\omega_k^{-tj}\sum\limits_{i=0}^n\dbinom{n}{i}p^i\omega_k^{ti}\\ &=\sum\limits_{j=0}^{k-1}j\sum\limits_{t=0}^{k-1}\omega_k^{-tj}(1+p\omega_k^t)^n \end{aligned} \]

后面的东西已经和 \(j\) 无关了,再次交换求和顺序把他化到前面去。

\[\begin{aligned} \sum\limits_{j=0}^{k-1}j\sum\limits_{t=0}^{k-1}\omega_k^{-tj}(1+p\omega_k^t)^n&=\sum\limits_{t=0}^{k-1}(1+p\omega_k^t)^n\sum\limits_{j=0}^{k-1}j\omega_k^{-tj} \end{aligned} \]

换元,令 \(x=\omega_k^{-t}\),那么原问题可以被归约为求解 \(f(k,x)=\sum\limits_{j=0}^{k-1} jx^j\)。这其实是一个经典的等比数列求和形式。

\[\begin{aligned} xf(k,x)-f(k,x)&=\sum\limits_{i=0}^{k-1} ix^{i+1}-\sum\limits_{i=0}^{k-1} ix^i\\ &=\sum\limits_{i=1}^{k} (i-1)x^i-\sum\limits_{i=0}^{k-1} ix^i\\ &=-\sum\limits_{i=1}^{k-1}x^i+(n-1)x^n\\ &=-\frac{x^n-1}{x-1}+1+(n-1)x^n \end{aligned} \]

然后把 \((x-1)\) 除过去即可。注意到 \(x\)\(n\) 次单位根,因此一定有 \(x^n=1\)。特判一下 \(x=1\) 即可,即可 \(O(k\log n)\) 解决。

斯特林反演

基本定义

先介绍斯特林数。

  • 第一类斯特林数

    第一类斯特林数 \(\begin{bmatrix}n\\m\end{bmatrix}\) 表示把 \(n\) 个不同的数分到 \(m\) 个互不区分的环的方案数。第一类斯特林数有递推式 \(\begin{bmatrix}n\\m\end{bmatrix}=\begin{bmatrix}n-1\\m-1\end{bmatrix}+(n-1)\begin{bmatrix}n-1\\m\end{bmatrix}\),其意义分别为考虑是新建一个环还是插入一个原来的环中。

  • 第二类斯特林数

    第一类斯特林数 \(\begin{Bmatrix}n\\m\end{Bmatrix}\) 表示把 \(n\) 个不同的球分到 \(m\) 个互不区分的盒子,每个盒子至少一个球的方案数。第二类斯特林数有递推式 \(\begin{Bmatrix}n\\m\end{Bmatrix}=\begin{Bmatrix}n-1\\m-1\end{Bmatrix}+m\begin{Bmatrix}n-1\\m\end{Bmatrix}\),其意义分别为考虑是新建一个盒子还是插入一个原来的盒子中。

    第二类斯特林数有组合意义下的重要等式。

    考虑令 \(g(m)\) 表示将 \(n\) 个球分到 \(m\) 个互不相同的盒子,不限制每个盒子是否为空的方案数,\(f(m)\) 为将 \(n\) 个球分到 \(m\) 个互不相同的盒子,限制每个盒子不为空的方案数,显然有 \(g(m)=m^n\),且 \(g(m)=\sum\limits_{i=0}^m \dbinom{m}{i}f(i)\)。然后显然可以二项式反演,整理后可得下式。

    \[\begin{aligned} f(m)&=\sum\limits_{i=0}^m (-1)^{m-i}\dbinom{m}{i}g(i)\\ &=\sum\limits_{i=0}^m (-1)^{m-i}\dfrac{m!i^n}{i!(m-i)!} \end{aligned} \]

考虑到第二类斯特林数要求盒子互不区分,所以 \(\begin{Bmatrix}n\\m\end{Bmatrix}=\dfrac{f(m)}{m!}=\sum\limits_{i=0}^m (-1)^{m-i}\dfrac{i^n}{i!(m-i)!}\)。另外应用此公式可以将普通幂转下降幂,这个很有用。

\[\begin{aligned} m^n&=\sum\limits_{i=0}^m \dbinom{m}{i} f(i)\\ &=\sum\limits_{i=0}^m \dfrac{m!}{(m-i)!} \begin{Bmatrix}n\\i\end{Bmatrix} \end{aligned} \]

仍然先给出式子。

\[\begin{cases} f(n)=\sum\limits_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}g(i)\\ g(n)=\sum\limits_{i=0}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}f(i) \end{cases} \]

证明考虑生成函数。

\(F,G\) 分别为 \(f,g\) 的 EGF,那么即可推出下式。

\[\begin{aligned} F(x)&=\sum\limits_{k=0} \dfrac{f(k)x^k}{k!}\\ &=\sum\limits_{k=0} \dfrac{x^k}{k!}\sum\limits_{i=0}\begin{Bmatrix}k\\i\end{Bmatrix}g(i)\\ &=\sum\limits_{i=0}g(i)\sum\limits_{k=0} \dfrac{x^k}{k!}\begin{Bmatrix}k\\i\end{Bmatrix}\\ &=\sum\limits_{i=0}g(i)\dfrac{(e^x-1)^i}{i!}\\ &=G(e^x-1) \end{aligned} \]

也就是说 \(F(x)=G(e^x-1)\),稍作变换 \(F(\ln(x+1))=G(x)\),代入后继续化简 \(G(x)\)

\[\begin{aligned} G(x)&=\sum\limits_{k=0}f(k)\dfrac{\ln(1+x)^k}{k!}\\ &=\sum\limits_{k=0} f(k)\dfrac{(-1)^k(-\ln(1-(-x)))^k}{k!}\\ &=\sum\limits_{k=0} f(k)(-1)^k\sum\limits_{i=0}\begin{bmatrix}i\\k\end{bmatrix}(-1)^i\dfrac{x^i}{i!}\\ &=\sum\limits_{i=0}\dfrac{x^i}{i!}\sum\limits_{k=0} f(k)(-1)^{k+i}\begin{bmatrix}i\\k\end{bmatrix} \end{aligned} \]

得证。

例题

由于斯特林反演没怎么见过,所以都是拿第二类斯特林数做普通幂转下降幂的东西。

P4827

首先考虑一个 \(O(nk^2)\) 的做法,我们拿二项式定理拆开幂次,然后换根维护前 \(k\) 次和,换根的时候二项式定理每次 \(O(k^2)\) 转移,复杂度 \(O(nk^2)\)

然后普通幂转下降幂,令 \(d(u,v)=\mathrm{dist}(u,v)\)即可得到如下式子。

\[\begin{aligned} \sum\limits_{i=1}^n d(i,u)^k&=\sum\limits_{i=1}^n\sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\dbinom{d(i,u)}{j}\\ &=\sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\sum\limits_{i=1}^n\dbinom{d(i,u)}{j}\\ &=\sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\sum\limits_{i=1}^n\left[\dbinom{d(i,u)-1}{j}+\dbinom{d(i,u)-1}{j-1}\right] \end{aligned} \]

枚举上界可以是 \(k\) 的原因是组合数和斯特林数限制了求和上界是 \(\min(k,d(i,u))\),且超出该范围的值均为 \(0\),故值不变,容易单次 \(O(k)\) 换根维护。

CF932E

这里主要讲平方做法。

仿照上一个题,我们把普通幂转下降幂,交换求和顺序后把组合数吸收到一起。

\[\begin{aligned} \sum\limits_{i=0}^n \dbinom{n}{i} i^k&=\sum\limits_{i=0}^n \dbinom{n}{i}\sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\dbinom{i}{j}\\ &=\sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\sum\limits_{i=0}^n \dbinom{n}{i}\dbinom{i}{j}\\ &=\sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\dbinom{n}{j} \sum\limits_{i=j}^n\dbinom{n-j}{i-j}\\ \end{aligned} \]

这个时候我们发现后面的东西只和 \(i-j\) 有关,那么我们改变求和上下界。

\[\begin{aligned} \sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\dbinom{n}{j} \sum\limits_{i=0}^n\dbinom{n-j}{i-j}&=\sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\dbinom{n}{j} \sum\limits_{i=0}^{n-j}\dbinom{n-j}{i}\\ &=\sum_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix} j!\dbinom{n}{j} 2^{n-j} \end{aligned} \]

然后 \(O(k^2)\) 推斯特林数,\(O(k)\) 算组合数即可。

posted @ 2023-08-24 21:45  -Comρℓex-  阅读(81)  评论(0编辑  收藏  举报