前言
- 组合数学也是数学中一个比较重要的分支,而其中最经典的模型莫过于盒子与球问题。
问题
- 按照球是否不同,盒子是否不同,盒子是否允许为空,大致可以分为 (2^3),也就是 (8) 种问题。
- 给定 (N) 个不同的球,放进 (M) 个不同的盒子,盒子允许为空,有多少种方案?((A))
- 给定 (N) 个不同的球,放进 (M) 个不同的盒子,盒子不允许为空,有多少种方案?((B))
- 给定 (N) 个不同的球,放进 (M) 个相同的盒子,盒子允许为空,有多少种方案?((C))
- 给定 (N) 个不同的球,放进 (M) 个相同的盒子,盒子不允许为空,有多少种方案?((D))
- 给定 (N) 个相同的球,放进 (M) 个不同的盒子,盒子允许为空,有多少种方案?((E))
- 给定 (N) 个相同的球,放进 (M) 个不同的盒子,盒子不允许为空,有多少种方案?((F))
- 给定 (N) 个相同的球,放进 (M) 个相同的盒子,盒子允许为空,有多少种方案?((G))
- 给定 (N) 个相同的球,放进 (M) 个相同的盒子,盒子不允许为空,有多少种方案?((H))
解法
-
A :给定 (N) 个不同的球,放进 (M) 个不同的盒子,盒子允许为空,有多少种方案?
对于每一个球,都有 (M) 种选择,所以答案即为 (M^N)
-
F :给定 (N) 个相同的球,放进 (M) 个不同的盒子,盒子不允许为空,有多少种方案?
经典隔板法问题,可以转化为:在 (N) 个球之间的 (N-1) 个间隙中选择 (M-1) 个位置将其分成 (M) 份,组合数直接求解。答案即为 (C_{N-1}^{M-1})
-
E :给定 (N) 个相同的球,放进 (M) 个不同的盒子,盒子允许为空,有多少种方案?
和 (F) 题类似,只不过盒子允许为空,那么这个时候我们可以假设每个盒子里都已经放了一个球,这个时候实际上就有 (N+M) 个球了,类似的,我们再次使用隔板法。对于每一种方案,我们就可以想象成每个空隙右边的第一个球是提前放好在盒子里的,如果将这个球省略,正好就是盒子允许为空的一种方案。故答案即为 (C_{N+M-1}^{M-1})
-
G :给定 (N) 个相同的球,放进 (M) 个相同的盒子,盒子允许为空,有多少种方案?
设 (f[n][m]) 表示将 (n) 个球放到 (m) 个盒子里的方案数。我们可以分两种情况来考虑:1.有一个盒子不放球的情况,那么答案就是 (f[n][m-1])。2.所有的盒子都放一个球,那么答案就是 (f[n-m][m])。根据加法原理,我们可以得到递推式:(f[n][m]=f[n][m-1]+f[n-m][m],m=min(m,n))。边界:(f[0][m]=1,f[n][1]=1)
-
H :给定 (N) 个相同的球,放进 (M) 个相同的盒子,盒子不允许为空,有多少种方案?
每个盒先放一个球,然后就可以变成问题 (G)。答案:(0quad(N<M)) 或者 (f[N-M][M])
-
D :给定 (N) 个不同的球,放进 (M) 个相同的盒子,盒子不允许为空,有多少种方案?
设 (f[n][m]) 表示将 (n) 个球放到 (m) 个盒子里的方案数。那么对于第 (n) 个球,则有两种选择:1.其单独放在一个盒子里,那么答案就是 (f[n-1][m-1])。2.其和其他的球共用一个盒子,因为有 (m) 个盒子可以选择,那么答案就为 (m imes f[n-1][m])。实际上这就是第二类斯特林数。根据加法原理,递推式为 (f[n][m]=f[n-1][m-1]+mcdot f[n-1][m])。边界:
if(m==n||m==1) return 1
。 -
C :给定 (N) 个不同的球,放进 (M) 个相同的盒子,盒子允许为空,有多少种方案?
和 (D) 类似,分别考虑有 (0sim M-1) 个盒子为空的情况,那么答案就为 (sum_{i=1}^nf[n][i])
-
B :给定 (N) 个不同的球,放进 (M) 个不同的盒子,盒子不允许为空,有多少种方案?
和 (D) 题类似,假如我们现在已经得到了将 (N) 个不同的球放进 (M) 个相同的盒子里的方案,那么实际上由于盒子是不同的,那么还需要对盒子进行排序,(因为盒子有异,所以交换两个盒子的顺序算不同的方案),乘上 (M) 的阶乘即可。
——2021年2月9日