小球与盒子的问题

这类问题的基本模型是:你有$n$个小球,$m$个盒子,现在想把这$n$个小球放进$m$个盒子中,问有多少种放的方法

但是只给出这样的条件并不足够,我们必须加上一些限制,否则结果是不确定的

一般加的有三个限制,即小球是否有区别、盒子是否有区别、允不允许有空盒子,也因此可以组合出八种不同的问题

接下来我们逐个讨论这八种问题

一.小球有区别,盒子有区别,允许有空盒子

这是最简单的,因为每个小球都有$m$种不同的放法,于是总共有$m^{n}$种不同的放法

二.小球有区别,盒子有区别,不允许有空盒子

首先是初等的情况:如果$m>n$,那么显然是不可能放好的,方案数为0

那么如果$m=n$,答案就是$n!$(注意不是$n!m!$,这是初学者常犯的错误,你不能让这俩一起变化)

而对于$n>m$的情况,我们不妨构造一个递推式$f[n][m]$表示把$n$个不同小球放进$m$个不同盒子的方法,那么当我们新增一个小球的时候,我们可以有:

$f[n+1][m]=m*(f[n][m]+f[n][m-1])$,这个递推式成立的原因是:当我们新增一个小球的时候,面对$m$个盒子就有两种可能,一种是原来这$m$个盒子都已经有球了,那么这个小球随便选个盒子放进去就行,另一种是原来只有$m-1$个盒子里有球,这样这个新来的球只能放在没有球的那个盒子里,但是由于盒子不同,没有球的盒子可能是这$m$个盒子中任何一个,因此也有$m$种可能

三.小球没区别,盒子有区别,不允许有空盒子

这种情况等价于求方程$x_{1}+...+x_{m}=n$的所有正整数解的组数

实际上就是决定每个盒子里要放几个小球,那么我们采用隔板法,把小球排成一行,这样小球之间一共有$n-1$个空隙,然后在这$n-1$个空隙中选择$m-1$个空隙放下隔板,这样第$i$个隔板与第$i+1$个隔板之间就是要放进第$i+1$个盒子的小球,于是答案即为$C_{n-1}^{m-1}$

四.小球没区别,盒子有区别,允许有空盒子

这种情况等价于求方程$x_{1}+...+x_{m}=n$的所有非负整数解的组数

这种情况也很容易,我们再拿$m$个小球过来,在每个盒子里都放一个,这样问题就转化成了你有$n+m$个小球,放进$m$个盒子里,不允许有空盒子的上面三的情况,那么答案即为$C_{n+m-1}^{m-1}$

但是如果换一个角度,我们说允许有空盒子,那么我们忽略所有空盒子剩下的盒子就是不空的(废话),那么我们假设有$i$个盒子非空,那么放法就是$C_{n-1}^{i-1}$,而由于盒子不同,选出这$i$个不空的盒子的方法为$C_{m}^{i}$,于是答案即为$\sum_{i=1}^{m}C_{m}^{i}C_{n-1}^{i-1}$,那么我们还可以获得一个组合恒等式:$\sum_{i=1}^{m}C_{m}^{i}C_{n-1}^{i-1}=C_{n+m-1}^{m-1}$

五.小球有区别,盒子没区别,不允许有空盒子

这里开始变得有些困难了,我们考虑递推:设$f[n][m]$为此时的方案数,那么有转移$f[n+1][m]=mf[n][m]+f[n][m-1]$

这个递推式的合理性在于,当我们新加一个小球的时候有两种可能的情况,一种是原来的$m$个盒子已经放满了,那么可以任选一个盒子放进去,另一种是还有一个空盒子,但是由于盒子没区别,所以空的是哪个无所谓,故前者要乘$m$,后者不乘

记$S_{2}(n,k)=f[n][k]$,这就是第二类斯特林数

第二类斯特林数$S(n,k)$表示将$n$个不同元素划分为$k$个集合的方案数

递推式:$S(n,k)=S(n-1,k-1)+kS(n-1,k)$

组合意义下的写法:$S(n,k)=\frac{1}{k!}\sum_{i=0}^{k}(-1)^{i}C(k,i)(k-i)^{n}$

这样的话,考虑快速求斯特林数的方法:

展开后面的组合数:

$S(n,k)=\frac{1}{k!}\sum_{i=0}^{k}(-1)^{i}\frac{k!}{i!(k-i)!}(k-i)^{n}$

然后扔到前面去:

$S(n,k)=\sum_{i=0}^{k}\frac{(-1)^{i}}{i!}\frac{(k-i)^{n}}{(k-i)!}$

这就是卷积了嘛

性质:

$m^{n}=\sum_{i=0}^{m}C_{m}^{i}S(n,i)i!$

六.小球有区别,盒子没区别,允许有空盒子

 由于允许有空盒子,那么我们忽略所有空盒子就是必须放满的情况,那么答案就是$\sum_{i=1}^{m}S_{2}(n,i)$(即只放在一个盒子~放在全部$m$个盒子的方案数之和)

七.小球没区别,盒子没区别,允许有空盒子

 这实际上就是把$n$拆成$m$个非负数之和的方案数,一般将这个数记作$P_{m}(N)$,但是这里可以写出一个递推$P[n+m][m]=P[n][m]+P[n+m][m-1]$,这个递推的思想是分两类讨论,一类是没有空盒子,那么相当于是在$n$进行$m$拆分的基础上每个数加上$1$,而如果有空盒子,那么不妨在$m-1$个盒子的基础上多放一个空盒子就可以。

八.小球没区别,盒子没区别,不允许有空盒子

类似上面的处理,我们可以先在每个盒子里放一个球转化成七的情况,这样答案就是上面的$P[n-m][m]$

原文地址:https://www.cnblogs.com/zhangleo/p/15551772.html