CSP初赛复习-30-第二类斯特林数
第二类斯特林数
第二类斯特林数S(n,m)表示的是把n个不同的小球放在m个相同的盒子里方案数
第二类斯特林数 -递推式
S(n,m)=S(n-1,m-1)+m * S(n-1,m)
其中
S(0,0)=1
S(n,0)=0
S(n,1)=1
S(n,n)=1
递推式分析
考虑放入第n个元素时,有2中情况n单独放入一个盒子和n不单独放入一个盒子
n单独放入一个盒子
n单独放入一个盒子,其余的n-1个小球放入剩余盒子
相当于把n-1个不同小球放入m-1个相同的盒子
S(n-1,m-1)
n不单独放入一个盒子
n不单独放入一个盒子,其实n-1个小球已经放入到m个相同的盒子内,此时方案数为
S(n-1,k)
然后把n分别放入m个盒子
n放入其中一个盒子(盒子M1),方案数为
S(n-1,k)
n放入盒子M2,方案数为
S(n-1,k)
n放入盒子Mm,方案数为
S(n-1,k)
所以总方案数为
m * S(n-1,k)
上述2种情况根据加法原理得到第二类斯特林数 -递推式
S(n,m)=S(n-1,m-1)+m * S(n-1,m)
第二类斯特林数计算
有了递推式,可以有2种方法计算,分别是递归法和递推法
一般使用递归法适合计算量特别小,递推式比较简单的情况,更直观的可以使用递推法从小到大计算出对应的数值,记录表格,防止重复计算
具体可以参考如下斯特林三角计算方法
第二类斯特林三角

球盒问题和第二类斯特林数
1 n个不同的小球,放入m个相同的盒子,不允许盒子为空,方案数多少?
分析
第二类斯特林数的定义
方案数
S(n,m)//根据定义带入第二类斯特林三角计算
2 n个不同的小球,放入m个相同的盒子,允许为空,方案数多少?
分析
允许盒子为空的情况,可以枚举几个盒子为空时对应非空盒子的情况,每种情况符合第二类斯特林数定义
可能存在,1个盒子非空,2个盒子非空...,m个盒子非空
对应方案数
S(n,1)+S(n,2)...S(n,m)
3 n个不同的小球,放入m个不同的盒子,不允许盒子为空,方案数多少?
分析
盒子不同,可以看作盒子相同时为其中一步: S(n,m)
在盒子相同基础上在考虑盒子不同的方案数: m!
分2步,根据乘法原理
方案数
S(n,m) * m!
4 n个不同的小球,放入m个不同的盒子,允许盒子为空,方案数多少?
分析
允许盒子为空的情况,可以枚举几个盒子为空时对应非空盒子的情况
1个盒子非空时
分2步
第1步,考虑n个不同小球,放入1个盒子,盒子不允许为空的方案数
第二类斯特林数 S(n,1)
第2步,考虑盒子不同,因为只有1个,所以为1种
方案数
S(n,1) * 1
//也可以表示
S(n,1) * 1!
2个盒子非空时
分2步
第1步,考虑n个不同小球,放入2个盒子,盒子不允许为空的方案数
第二类斯特林数 S(n,2)
第2步,考虑盒子不同,2个盒子全排列,所以为2!种
方案数
S(n,2) * 2!
m个盒子非空时
分2步
第1步,考虑n个不同小球,放入3个盒子,盒子不允许为空的方案数
第二类斯特林数 S(n,3)
第2步,考虑盒子不同,3个盒子全排列,所以为m!种
方案数
S(n,m) * m!
所以总的方案数
S(n,1) * 1! + S(n,2) * 2! + .... + S(n,m) * m!
CSP初赛复习-30-第二类斯特林数-练习题
https://www.cnblogs.com/myeln/articles/17666033.html
作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号