「学习笔记」斯特林数

第一类斯特林数

定义是 \(n\) 个数,\(m\) 个圆排列

\(\Theta(n^2)\)\(dp\) 是:\(S_{i,j}=S_{i-1,i-1}+S_{i-1,j}\times (i-1)\)

如果预处理一行的话需要这个式子:

\[x^{\overline{n}}=\sum_{i=0}^{n-1} \begin{bmatrix} n\\i\end{bmatrix} x^i \]

分治乘法做到 \(\Theta(n\log^2n)\),更快的部分需要倍增

也就是 \(x^{\overline{2n}}=x^{\overline{n}}(x+n)^{\overline{n}}\)

考虑 \(f(x)\) 来推 \(f(x+c)\) 是可以做的,那么直接两个卷积即可

注意减法卷积贡献到的位置,是 \(len+i+1\)

对于求一列的情况,考虑 \(EGF\)\(S_1\)\(EGF\)\(\sum_{i} \frac{x^{i}}i\)

对于多个圆排列就快速幂一下,最后要除掉圆排列个数因为其本质相同

写一个 \(ln+exp\) 即可

第二类斯特林数

定义第二类斯特林数 \(S(n,m)\) 为将 \(n\) 个球放到 \(m\) 个盒子里的方案数,球不同,盒子相同

然后容易由 \(dp\) 得到一个递推式

\[S(n,m)=S(n-1,m-1)+m\times S(n-1,m) \]

按照组合意义:容斥有多少个盒子是空的

\[S(n,m)=\frac 1 {m!}\sum _ {k=0}^m (-1)^k \times \binom m k \times (m-k)^n \]

把式子推一下

\[S(n,m)=\sum_{k=0}^m \frac {(-1)^k}{k!}\times \frac{(m-k)^n} {(m-k)!} \]

这里是个卷积,预处理阶乘,逆元就做完了

第二类斯特林数的一个性质:

\[n^k=\sum_{i=0}^k S(k,i)\times i! \times \binom n i \]

也可以导出:

\[\sum_{i=1}^n \binom n i i^k=\sum_{i=1}^k 2^{n-i} \binom n i S(k,i)\times i! \]

直接上组合意义,左边是在 \(n\) 个互不相同盒子里面放 \(k\) 个小球的方案

右边是枚举盒子的数量,放在哪几个盒子里面,然后因为盒子不一样,然后就在来个阶乘就没了

如果是求一列,考虑设第 \(i\) 列的普通生成函数为 \(S_i(x)\)

不难观察到其只和自己和上一列有关,递推式就是 \(S_i(x)=mx\times S_i(x)+S_{i-1}(x)\times x\)

不断迭代下去得到

\[S_i(x)=\frac{x^m}{\prod_{i=1}^m 1-ix} \]

分治乘法加求逆即可,也可以按照 \(EGF\) 来做

斯特林反演:

\[f(n)=\sum_i (-1)^i \begin{Bmatrix}n \\i \end{Bmatrix} g(i) \]

\[g(n)=\sum_i (-1)^i \begin{bmatrix} n\\ i\end{bmatrix} f(i) \]

将排列斯特林数和组合斯特林数调换位置也是正确的,这个使用结论:

\[[m=n] =(-1)^n\sum_{i} (-1)^i\begin{Bmatrix} n\\ i \end{Bmatrix} \begin{bmatrix}i\\ m\end{bmatrix} \]

或者

\[[m=n] =(-1)^n\sum_{i} (-1)^i\begin{Bmatrix} i\\ m \end{Bmatrix} \begin{bmatrix}n\\ i\end{bmatrix} \]

可以证明,而这两个结论使用上升下降幂公式硬上,发现对于多项式系数必然一致,那么证毕

然而本题中并不使用上面的式子,而是考虑:

\[f(x)=\sum_{i=x}^n \begin{Bmatrix} n\\ i\end{Bmatrix}g(i) \]

可以得到

\[g(x)=\sum _ {i=x}^n \begin{bmatrix} n\\ i\end{bmatrix}(-1)^{i-x} f(i) \]

证明是类似的,本质上是一个上三角变成了下三角

例题

HEOI2016 求和

首先把三角转成矩形,然后套上 第二类斯特林数的组合公式,每一步都找无关量,最后推等差出来卷积即可

\(\Theta(n)\) 的做法当然不是现在学的

「Luogu4827」 Crash的文明世界

记住这个关键的式子:

\[n^k=\sum_{j=0}^k \begin{Bmatrix} k\\ j\end{Bmatrix}j! \binom n j \]

使用人类智慧,把最后的组合数用杨辉三角展开(其实用“如何转移”的思路也可以得到)

那么设 \(f_{x,i}\) 表示 \(x\) 为根的时候子树里面 \(\binom {dis} i\) 的和

换根统计即可

FJOI2016 建筑师

一定能看到最高的那个楼,所以该正反的序列就都以高度为 \(n\) 的为结尾

然后就是在剩下的 \(n-1\) 个里面选 \(b-1\) 个构成下降序列扔后面,选 \(f-1\) 个构成上升序列扔前面

所以这 \(n\) 个数被分成若干个圆排列

再想上这几个组再组合一下可以分成前面的 \(f-1\) 个和后面的 \(b-1\) 个,所以

\[ans=\binom {(b-1)+(f-1)} {f-1}\times S(n-1,(b-1)+(f-1)) \]

\(O(n^2)\) 预处理斯特林数,和组合数

posted @ 2021-02-06 15:29  yspm  阅读(234)  评论(0编辑  收藏  举报