当小球遇上盒子

Copyright

本页面转载于当小球遇上盒子

前置知识

组合数 :从 n 个物品里选出 m 个物品进行组合的方案数。

C_{n}^{m}=\frac{n!}{m!\cdot (n-m)!}

排列数:从 n 个物品里选出 m 个物品进行排列的方案数。

A_{n}^{m}=\frac{n!}{(n-m)!}

圆排列:一个 n 个元素构成的集合,从中选出 m 个元素构成一个环的方案数。

Q_{n}^{m}=\frac{A_{n}^{m}}{m}

第一类斯特林数:用 n 个元素组成 m个环的方案数。

s_{n}^{m}=s_{n-1}^{m-1}+(n-1)\cdot s_{n-1}^{m}

第二类斯特林数:把一个大小为 n 的集合划分成 m 个非空集合的方案数,集合内部无序。

S_{n}^{m}=S_{n-1}^{m-1}+m\cdot S_{n-1}^{m}

1.球相同,盒子不同,不能有空盒

就是把 n 个球分成 m 份,每一份不能为空,插 m−1 个板即可。

ans=C_{n-1}^{m-1}

2.球相同,盒子不同,可以有空盒

n 个球分成 m 份,每一份可以为空,再增加 m 个球,插 m-1 个板,每一份再拿走一个球即可。

ans=C_{n+m-1}^{m-1}

3.球不同,盒子不同,可以有空盒

对于每一个球,你都可以放到[1,m]的任意一个位置,由于球不同,所以球与球之间是独立的。

ans=m^{n}

4.球不同,盒子相同,不能有空盒

相当于把 n 个元素的集合划分成 m 份,也就是第二类斯特林数

ans=S_{n}^{m}

这个做法时间复杂度是O(n^{2})

其实这个就是问题5的答案除以 m!

5.球不同,盒子不同,不能有空盒

公式表示是

ans=m!\cdot S_n^m

6.球不同,盒子相同,可以有空盒

因为可以有空盒,我们可以枚举每次一共用了几个盒子,然后把相应的第二类斯特林数加起来就可以了

ans=\sum_{i=0}^{m}S[n][i]

这种数也叫Bell数。

Bell数的定义:第 n 个Bell数表示集合[1,2,3,...,n]的划分方案数

B_{n}=\sum_{m=1}^{n}S[n][m]

7.球相同,盒子相同,可以有空盒

f[n][m]表示 n 个球放到 m 个盒子里的方案数

if(n==0||m==1) f[n][m]=1
if(n < m) f[n][m]=f[n][n]

$$if(n>=m) f[n][m]=f[n−m][m]+f[n][m−1] $$ 如果球比盒子多,分为放满和不放满两种情况讨论
等价于自然数拆分问题

8.球相同,盒子相同,不能有空盒

我们首先在所有的盒子中放一个球,就转化成了问题7

ans=f[n−m][m]

(有兴趣的同学请自行搜索“母函数/生成函数”)