先提出一个问题:将n个不同小球划分为k个集合的方案数是多少?(集合不为空)。

或者,这个问题还可以表述为这种形式:将n个不同小球放入k个相同盒子的方案数。

实际上,斯特林数的实际含义就是这么个问题。

我们设s(i,j)s(i,j)s(i,j)表示将iii个小球划分为jjj集合的方案数。

先给出递推式:

s(i,j)=s(i−1,j)∗j+s(i−1,j−1)s(i,j)=s(i-1,j)*j+s(i-1,j-1)s(i,j)=s(i−1,j)∗j+s(i−1,j−1)

乍一看,是不是和组合数的递推公式有些像?

其实,二者都是利用杨辉三角的思想来推出的式子。

具体含义如下:我们已求出s(i−1,...)s(i-1,...)s(i−1,...),即将 i−1i-1i−1个不同小球分为.........个集合的方案数。

当前我们要考虑第iii个球,有两种放置的方法:

1.1.1. 单独将第iii个小球放入一个新集合;对应递推式中的s(i−1,j)∗js(i-1,j)*js(i−1,j)∗j,意为将第iii个球放入已存在的jjj个集合中,有jjj种放法。

2.2.2. 将第iii个小球放入已存在的集合中。对应递推式中的s(i−1,j−1)s(i-1,j-1)s(i−1,j−1),意为已存在j−1j-1j−1个集合,我们要再开一个集合来放置第iii个小球。

以上便是斯特林数的递推式。

但我们不仅仅要掌握斯特林数的递推式,因为有些时候,题目中的nnn和kkk会很大,用递推显然不可行,而我们只需要用到很少次数的斯特林数,这时就要考虑直接求某一项斯特林数了。

s(n,k)=1k!∑i=0k(−1)i(ki)(k−i)ns(n,k)=\frac{1}{k!}\sum_{i=0}^{k}{(-1)^i \tbinom{k}{i}(k-i)^n}s(n,k)=k!1​∑i=0k​(−1)i(ik​)(k−i)n

严格证明要用到二项式反演,这里不过多赘述
但是我们可以感性理解一下(滑稽~)。
大家想一下,这个式子表示什么含义?

∑i=0k(−1)i(ki)(k−i)n\sum_{i=0}^{k} {(-1)^i\tbinom{k}{i}(k-i)^n}∑i=0k​(−1)i(ik​)(k−i)n

实际上,这个式子的答案是就等于将n个不同小球放入k个不同盒子的方案数,思想为容斥原理。而我们要求的是将n个小球放入k个相同盒子的方案数。那么,这两者之间其实就是排列数和组合数之间的关系,后者因为不考虑盒子的异同,所以其每一种方案在前者中都会因考虑盒子的异同而重复k!k!k!次,所以再乘上1k!\frac{1}{k!}k!1​,就得到

s(n,k)=1k!∑i=0k(−1)i(ki)(k−i)ns(n,k)=\frac{1}{k!}\sum_{i=0}^{k}{(-1)^i \tbinom{k}{i}(k-i)^n}s(n,k)=k!1​∑i=0k​(−1)i(ik​)(k−i)n。

除此之外,我们还常常会用到一个式子:

xn=∑k=0ns(n,k)C(x,k)k!x^n=\sum_{k=0}^{n}s(n,k)C(x,k)k!xn=∑k=0n​s(n,k)C(x,k)k!

xnx^nxn意为将n个球放入x个不同盒子,且盒子可以为空的总方案数:枚举非空盒子的数目,将n个球分为k个集合,放入这k个盒子中。

!!!!!!!!!记住,此公式非常重要,是我们将一个恶心公式转换为含斯特林数的较简单公式的非常实用的式子。

最后再献上一个较实用的转换公式:

C(n,i)A(i,j)=C(n−j,i−j)A(n,j)C(n,i)A(i,j)=C(n-j,i-j)A(n,j)C(n,i)A(i,j)=C(n−j,i−j)A(n,j)

用组合数和排列数的公式就可以证出来,配合斯特林数食用非常香香香。
奉上一坨递推求斯特林数的代码:

 s[0][0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++)s[i][j]=s[i-1][j]*j+s[i-1][j-1];}

推荐一道好题:
cash的文明世界

毒瘤~~(第二类斯特林数及其相关公式)相关推荐

  1. 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

    出处0.0 用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O( ...

  2. 莓良心(第二类斯特林数)

    莓良心 problem solution code problem 莓在执行任务时,收集到了 nnn 份岩浆能源,其中第 iii 份的能量值是 wiw_iwi​ ,她 决定将它们分成恰好 kkk 组带 ...

  3. 第二类斯特林数学习笔记

    第二类斯特林数 定义 第二类斯特林数 S(n,m)S(n,m)S(n,m) 表示将 nnn 个不同的小球放到 mmm 个相同的盒子里的方案数.S(n,m)S(n,m)S(n,m) 也可以用 {nm}\ ...

  4. [学习笔记]第一类/第二类斯特林数

    前置知识 · 组合数学基础 · 容斥原理 · 生成函数 · FFT/NTT · 多项式exp,多项式ln,多项式快速幂,多项式平移 一些规定 · 下降幂 xn‾=∏i=1n(x−i+1)x^{\und ...

  5. 组合基础2 第一类斯特林数 第二类斯特林数 基础部分

    记xn‾=x(x+1)(x+2)⋯(x+n−1)x^{\overline{n}}=x(x+1)(x+2)\cdots(x+n-1)xn=x(x+1)(x+2)⋯(x+n−1),xn‾=x(x−1)(x ...

  6. BZOJ 2159 「国家集训队」Crash 的文明世界(第二类斯特林数,换根DP)【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2159 是 hydro 的 BZOJ ...

  7. 【组合数学】第一类,第二类斯特林数(Stirling),Bell数

    第一类斯特林数 定理: 第一类斯特林数S1(p,k)计数的是把p个对象排成k个非空循环排列的方法数. 证明:把上述定理叙述中的循环排列叫做圆圈 递推公式: S1(p,p)=1(p>=0),有p个 ...

  8. 新疆大学(新大)OJ xju 1006: 比赛排名 第二类斯特林数+阶乘

    题目链接:http://acm.xju.edu.cn/JudgeOnline/problem.php?id=1006 第二类斯特林数: 第二类Stirling数实际上是集合的一个拆分,表示将n个不同的 ...

  9. 【CF961G】Partitions(第二类斯特林数)

    [CF961G]Partitions(第二类斯特林数) 题面 CodeForces 洛谷 题解 考虑每个数的贡献,显然每个数前面贡献的系数都是一样的. 枚举当前数所在的集合大小,所以前面的系数\(p\ ...

最新文章

  1. python 参数传递
  2. HTML实时显示任务状态,如何监视后台任务进度和完成 (HTML)
  3. python的用算法进制转换详解_学习python第五天进制转换
  4. OpenCV3.4.5带GPU编译error: #error This file requires compiler and library support for the ISO C++ 2011
  5. ddos常见攻击报文
  6. 有哪些比较好用的安卓模拟器(电脑端)
  7. comsol通直流电_基于COMSOL仿真的高压直流交联聚乙烯(XLPE)电缆附件设计
  8. 如何把软件Origin切换变成中文显示?
  9. 齐桓公称霸天下的用人之道
  10. IDEA中使用Docker插件构建镜像并推送至私服Harbor
  11. 从0开始学习python7:Python中词频统计以及sort的排序用法
  12. 用pycharm制做简单的音乐播放
  13. Cornfields
  14. WPF连接SQL数据库
  15. 2019年旅韩华侨华人新春招待会举行
  16. Windows 10 版本 21H1不推送的手动更新方法
  17. win+l不能锁定计算机
  18. linux下修改Oracle用户的密码
  19. 分段式多级离心泵_D型卧式分段式多级离心泵结构图
  20. IO口软件模拟IIC

热门文章

  1. 用JS简单实现Vue的双向绑定
  2. 高校学生档案学籍管理系统
  3. 数领科技|SOLIDWORKS工程图标注,看完这篇就懂了
  4. 微推贝贝视频号引流软件基于社群私域流量抢占短视频红利
  5. 乘风破浪会有时,华为云帆济沧海
  6. mysql布尔数据类型_MySQL数据类型
  7. mmsegmentation使用教程 使用 OpenMMLab 的 MM segmention 下Swin-T 预训练模型 语义分割 推理的记录
  8. android io性能测试,Android手机IO性能测试Nexus 6垫底
  9. Android手机分辨率测试程序
  10. ngix 常用配置之 location 匹配规则