版权声明:蒻蒟的bolg... https://blog.csdn.net/Rose_max/article/details/85472358
第一类斯特林数
p个不同人围着
m个不同圆桌坐,要求每桌非空,方案数即为
S(p,k)
递推
边界
S(p,p)=1(p>=0),S(p,0)=0(p>=1)
分类讨论一下…
新加入的人可以新开一张桌子,前面的方案即为
S(p−1,k−1)
也可以和之前的人坐,先把前面的人安排好了的方案数是
S(p−1,k),我们让这个人任选一个人,坐在他的左边,方案数即为
(p−1)∗S(p−1,k)
综上,转移即为
S(p,k)=S(p−1,k−1)+(p−1)∗S(p−1,k)
复杂度
O(n2)
性质
第一类斯特林数
S(n,m)其实可以表示为
x的
n次上升幂的第
m项系数
即
xn↑=x(x+1)(x+2)⋯(x+n−1)=i=0∑ns(n,k)xk
可以分治NTT或FFT求出,复杂度
O(nlogn2)
第二类斯特林数
n个不同球放入
m个相同盒子的方案数即为
S(n,m)
递推
仍然分类讨论
新加入的球可以新开一个盒子,即为
S(n−1,m−1)
或者在之前任选一个盒子放入,即为
m∗S(n−1,m−1)
综上所述,有
S(n,m)=S(n−1,m−1)+m∗S(n−1,m−1)
复杂度
O(n2)
容斥原理
我们可以枚举至少有多少个盒子是空的,剩下的盒子随便放
那么有
S(n,m)=m!1k=0∑m(−1)kCmk(m−k)n
再推一下会有
=m!1k=0∑m(−1)kk!(m−k)!m!(m−k)n
=k=0∑mk!(−1)k∗(m−k)!(m−k)n
容易发现,这是一个卷积形式,组合数和次幂都可以预处理
于是可以通过FFT或者NTT求出
S(n,0),S(n,1)...
复杂度
O(nlogn)
性质
nk=i=0∑min(n,k)S(k,i)∗i!∗Cni
等式左边即为
k个不同小球放入
n个不同盒子的方案数
我们可以通过枚举放入了多少个盒子,即为
S(k,i)∗i!,由于第二类斯特林数中盒子是相同的所以我们需要乘一个
i!
再在
n个盒子中选出
i个可知等式合法