第二类斯特林数小结

本文介绍了第二类斯特林数s2nm,它表示将n个数放入m个集合的方案数。通过递推式、预处理方法以及使用容斥原理推导通项公式。文章还提供了利用NTT(Number Theoretic Transform)优化计算的思路,并给出了一道相关题目——bzoj4555,展示了如何应用斯特林数解决实际问题。
摘要由CSDN通过智能技术生成

第二类斯特林数

s 2 n m s2_n^m s2nm表示将 n n n个数放进 m m m个集合的方案数。
有一个显然的递推式:
s 2 n m = s 2 n − 1 m − 1 + m ∗ s 2 n − 1 m s2_n^m=s2_{n-1}^{m-1}+m*s2_{n-1}^m s2nm=s2n1m1+ms2n1m,对应的意义:要么第 n n n个单独构成一个新的集合,要么放在之前某个集合中。
然而第二类斯特林数并没有什么生成函数。
但它可以花 O ( n l o g n ) O(nlogn) O(nlogn)的时间预处理出来。
我们考虑用容斥原理来推第二类斯特林数的通项公式,假设现在求 s 2 i j s2_i^j s2ij强制枚举 k k k个集合为空来计算贡献。
于是 s 2 i j = ∑ k = 0 j C j k ( j − k ) i ( − 1 ) k j ! s2_i^j=\frac{\sum_{k=0}^jC_j^k(j-k)^i(-1)^k}{j!} s2ij=j!k=0jCjk(jk)i(1)k
然后整理一下右边变成 ∑ k = 0 j ( − 1 ) k k ! ( j − k ) i ( j − k ) ! \sum_{k=0}^j\frac{(-1)^k}{k!}\frac{(j-k)^i}{(j-k)!} k=0jk!(

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值