「总结」容斥。二.反演原理 5.划分容斥

参考的\(blogs\)这篇

还有具体数学。

是斯特林反演了。

首先必要的是两类斯特林数。

在定义上很重要的区别就是第一类是划分排列,而第二类是划分组合。

性质上比较重要的就是第一类是将升降幂转化为通常幂,第二类则反之。

\(fr.\)第一类斯特林数。

\[\left[\begin{array}{c}n\\k\end{array}\right] \]

\(n\)个元素划分为\(k\)个集合,每个集合内圆排列的方案数。

根据定义,枚举第\(n\)个元素是处于一个新的集合,还是处于之前某个集合中的某个元素的右侧,可以得到递推式:

\[\left[\begin{array}{c}n\\k\end{array}\right]=\left[\begin{array}{c}n-1\\k-1\end{array}\right]+(n-1)\left[\begin{array}{c}n-1\\k\end{array}\right] \]

性质1:

说过了第一类斯特林数是划分排列。

\[\sum\limits_{i=0}^{n}\left[\begin{array}{c}n\\i\end{array}\right]=n! \]

证明:排列唯一定义一个轮换,轮换唯一定义一个排列。

性质上比较重要的就是第一类是将升降幂转化为通常幂,第二类则反之。

性质2:

\[x^{\underline{n}}=\sum\limits_{i=0}^{n}(-1)^{n-i}\left[\begin{array}{c}n\\i\end{array}\right]x^i \]

归纳证明:

\[\begin{array}{rcl} \\ x^{\underline{n+1}}&=&(x-n)x^{\underline{n}}\\&=&x\sum\limits_{i=0}^{n}\begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i}x^{i}-n\sum\limits_{i=0}^{n}\begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i}x^{i}\\&=&\sum\limits_{i=0}^{n}\begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i}x^{i+1}+n\sum\limits_{i=1}^{n+1}\begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i+1}x^{i}\\&=&\sum\limits_{i=1}^{n+1}\begin{bmatrix}n\\i-1 \end{bmatrix}(-1)^{n-i+1}x^{i}+n\sum\limits_{i=1}^{n+1}\begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i+1}x^{i}\\&=&\sum\limits_{i=1}^{n+1}\left(\begin{bmatrix}n\\i-1 \end{bmatrix}+n\begin{bmatrix}n\\i \end{bmatrix}\right)(-1)^{n-i+1}x^i\\&=&\sum\limits_{i=1}^{n+1}\begin{bmatrix}n+1\\i \end{bmatrix}(-1)^{n+1-i}x^i\\&=&x^{\underline{n+1}}\\ \end{array} \]

性质3:

\[x^{\overline{n}}=\sum\limits_{i=0}^{n}\begin{bmatrix}n\\i\end{bmatrix}x^i \]

归纳证明:

\[\begin{array}{rcl}\\x^{\overline{n+1}}&=&(x+n)x^{\overline{n}}\\&=&(x+n)\sum\limits_{i=0}^{n}\begin{bmatrix}n\\i\end{bmatrix}x^i\\&=&\sum\limits_{i=1}^{n+1}\begin{bmatrix}n\\i-1 \end{bmatrix}x^i+n\sum\limits_{i=1}^{n+1}\begin{bmatrix}n\\i\end{bmatrix}x^i\\&=&\sum\limits_{i=1}^{n+1}\left(\begin{bmatrix}n\\i-1\end{bmatrix}+n\begin{bmatrix}n\\i\end{bmatrix}\right)x^i\\&=&\sum\limits_{i=1}^{n+1}\begin{bmatrix}n+1\\i\end{bmatrix}x^i\\&=&x^{\overline{n+1}}\\ \end{array} \]

求第一类斯特林数:

利用性质3:

设母函数\(f(x)^n=x^{\underline{n}}=\sum\limits_{i=0}^{n}a_ix^i\)

那么求出的\(a_i\)其实就是一行的第一类斯特林数,考虑倍增\(FFT\)

\[f(x)^{2n}=f(x)^f(x+n)^n \]

当我们得到\(f(x)^n\)的时候考虑如何求出$f(x+n)^n

\[\begin{array}{rcl}f(x+n)^n&=&\sum\limits_{i=0}^{n}a_i(x+n)^i\\&=&\sum\limits_{i=0}^{n}a_i\sum\limits_{j=0}^{i}\binom{i}{j}x^j n^{i-j}\\&=&\sum\limits_{i=0}^{n}x^i\sum\limits_{j=i}{n}\binom{j}{i}a_jn^{j-i}\\&=&\sum\limits_{i=0}^{n}x^i i!\sum\limits_{j=i}{n}\frac{j!}{(j-i)!}n^{j-i}a_j\end{array} \]

后面是个卷积,直接\(NTT\)就完事。

倍增求解复杂度仍然为\(O(nlogn)\)

\(se.\)第二类斯特林数。

\[\begin{Bmatrix}n\\k\end{Bmatrix} \]

\(n\)个元素划分为\(k\)个集合的方案数。

根据定义,枚举第\(n\)个元素所在的集合,可以得到递推式:

\[\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n-1\\k-1\end{Bmatrix}+k\begin{Bmatrix}n-1\\k\end{Bmatrix} \]

性质1:

\[k^n=\sum\limits_{i=0}^{k}\begin{Bmatrix}n\\i\end{Bmatrix}i!\binom{k}{i}=\sum\limits_{i=0}^{k}\begin{Bmatrix}n\\i\end{Bmatrix}k^{\underline{i}} \]

我们在\(k\)个集合中选择\(i\)个集合放入元素,然后全排列这些集合,得到的就是\(n\)个元素放入\(k\)个可空集合的方案数。

性质2:

说过了第二类斯特林数是划分组合。

考虑用组合数来表示斯特林数。

考虑二项式反演。
我们一共有\(n\)个元素和\(k\)个集合,来模拟划分的过程来满足0个非空这个条件。
我们设\(g(m)\)为划分中至少\(m\)个空集合的方案数,\(f(m)\)为恰好有\(m\)个。

\[g(m)=\binom{k}{m}(k-m)^n \]

\[g(m)=\sum\limits_{i=m}^{k}\binom{k}{i}f(i) \]

二项式反演得到:

\[f(m)=\sum\limits_{i=m}^{k}(-1)^{i-m}\binom{k}{i}g(i) \]

\[f(0)=\sum\limits_{i=0}^{k}(-1)^i\binom{k}{i}(k-i)^m \]

得到:

\[\begin{Bmatrix}n\\k\end{Bmatrix}=\frac{1}{k!}\sum\limits_{i=0}^{k}(-1)^i\binom{k}{i}(k-i)^n \]

求第二类斯特林数:

利用性质2。

展开:

\[\begin{array}{rcl}\\ \begin{Bmatrix}n\\k\end{Bmatrix}&=&\sum\limits_{i=0}^{k}(-1)^i\frac{1}{k!}\frac{k!}{i!(k-i)!}(k-i)^n\\&=&\sum\limits_{i=0}^{k}(-1)^i\frac{1}{i!}\frac{(k-i)^n}{(k-i)!}\end{array} \]

是卷积的形式,那么可以在\(O(nlogn)\)的复杂度内求出第\(n\)行斯特林数。

\(th.\)斯特林反演。

首先给出结论:

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

两个引理:

\[x^{\underline{n}}=(-1)^n(-x)^{\overline{n}} \]

\[x^{\overline{n}}=(-1)^n(-x)^{\underline{n}} \]

只证明第一个:

证明:

\[\begin{array}{rcl}x^{\underline{n}}&=&(-1)^n\prod\limits_{i=0}^{n-1}(-(x-i))\\&=&(-1)^n(-1)^n\prod\limits_{i=0}^{n-1}(x-i)\\&=&x^{\underline{n}}\end{array} \]

两个反转公式:

\[\sum\limits_{i=m}^{n}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\m\end{Bmatrix}=[m=n] \]

\[\sum\limits_{i=m}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}\begin{bmatrix}i\\m\end{bmatrix}=[m=n] \]

反转一证明:

由第一类斯特林数性质2和第二类斯特林数性质1得到:

\[\begin{array}{rcl}x^{\underline{n}}&=&\sum\limits_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}x^i\\&=&\sum\limits_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\sum\limits_{j=0}^{i}\begin{Bmatrix}i\\j\end{Bmatrix}x^{\underline{j}}\\ \end{array} \]

更换枚举顺序得到:

\[=\sum\limits_{i=0}^{n}x^{\underline{i}}\sum\limits_{j=i}^{n}(-1)^{n-j}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}j\\i\end{Bmatrix} \]

\(f(n,m)=\sum\limits_{i=m}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\m\end{Bmatrix}\)

那么:

\[\begin{array}{rcl}&=&\sum\limits_{i=0}^{n}x^{\underline{i}}f(n,i)\\&=&x^{\underline{n}}\\&=&\sum\limits_{i=0}^{n}x^{\underline{i}}[n=i]\end{array} \]

所以:

\[f(n,m)=[n=m] \]

\(f\)和反转公式一是相等的,得证。

然后反转二证明:

\[x^n=\sum\limits_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}(-1)^{i}x^{\underline{i}} \]

利用引理二:

\[\begin{array}{rcl}&=&\sum\limits_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}(-1)^i\sum\limits_{j=0}^{i}\begin{bmatrix}i\\j\end{bmatrix}(-1)^j(x)^j\\&=&\sum\limits_{i=0}^{n}x^j\sum\limits_{j=i}^{n}(-1)^{j-i}\begin{Bmatrix}n\\j\end{Bmatrix}\begin{bmatrix}j\\i\end{bmatrix}\end{array} \]

斯特林反演证明:

假设:

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

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

另一种至少形式:

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

\(fo.\)相互再归的鹅妈妈。

与其说是斯特林反演不如说是系数构造容斥了。

根据某个斯特林数的性质设计容斥:

\[x^{\underline{n}}=\sum\limits_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}x^i \]

\(x=1\)带入。

\[\sum\limits_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}=1^{\underline{n}}=[n=1] \]

因为下降幂再乘就乘到0了。

设集合\(S\)\(n\)个元素,\(S\)的一种集合划分为\(m\),记作\(m\in S\),\(m\)中的集合个数称做\(k\),每个集合的大小称作\(a_i\)

考虑第一类斯特林数的意义,其实就是枚举每一种划分,然后将划分中的每个集合排序。

那么:

\[[n=1]=\sum\limits_{m\in S}(-1)^{n-k}\prod{i=1}^{k}(a_i-1)!=\sum\limits_{m\in S}\prod{i=1}^{k}(a_i-1)!(-1)^{a_i-1} \]

这就是题解写的那个式子了,俩月之前还理解不了呢。

假设我们已经求出可以重复的方案数。

我们把\(n\)集合划分,要求相同的数在同一集合,不同的在不同集合。

对于一个划分方案,我们发现它要满足的条件是:

\[\prod\limits_{i=1}^{k}[a_i=1] \]

也就是各不相同。

设一个容斥系数\(f(m)\),总的被计算的方案就是:

\[\sum\limits_{m\in S}f(m)\prod\limits_{i=1}^{k}\begin{bmatrix}a_i\\1\end{bmatrix} \]

要求每个被计算的方案都满足:

\[\prod\limits_{i=1}^{k}[a_i=1] \]

那么:

\[f(m)=(-1)^{n-k} \]

\(dp[i]\)\(i\)个人可重复的方案数。

\[ans=\sum\limits_{m\in S}dp[k](-1)^{n-k}\prod\limits_{i=1}^{k}\begin{bmatrix}a_i\\1\end{bmatrix}=\sum\limits_{m\in S}dp[k]\prod\limits_{i=1}^{k}(a_i-1)!(-1)^{a_i-1} \]

现在考虑求\(dp\)数组。

首先考虑有序方案,最后除去\(n!\)即可。

枚举究竟在哪一位某个人开始与\(R\)不相同,这样得到了的人后面可以乱填,同时只需要留一个人来调和其他不为0的位置即可。

数位\(dp\)

好久以前的题啊,终于还是解决掉了。

posted @ 2019-12-13 19:25  Lrefrain  阅读(441)  评论(4编辑  收藏  举报