小球与盒子的故事

小球和盒子是非常经典(烂大街)的一种模型,以小球和盒子的爱恨情仇为背景,对把小球放到这个盒子里还是那个盒子里进行的一系列哲学问题探讨以及珂学形态分析,其中基本会涉及到组合数学(雾)和计数DP(雾)。

--- 这话说滴对!

n 个球 , m 个盒

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

[huge ans= C(n - 1 , m - 1) ]

意思是把 n 个球放入分成 m 份 , 利用隔板法的思想 , 在 总共的 n - 1 个空隙中 , 选出m - 1 个空隙就可以了。

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

[huge ans = C(n + m - 1 , m - 1) ]

就是 再插入m个隔板表示这个位置可以为空 , 总共就有了 n + m - 1 个隔板。

3.球不同 , 盒不同 , 可空

[huge ans = m^n ]

这个是最简单的 。 n 个球,每个都可以有 m 中选择。

4.球不同 , 盒相同 , 不可空

[huge ans = S2[i][j] ]

也就是第二类斯特林(加特林)数。

第二类斯特林数S(n,m)

表示的是把n个不同的小球放在m个相同的盒子里方案数 , 不可空
递推公式

容斥原理

即枚举空盒的个数,剩下的随意放置,由于盒子是相同的最后要除以m!

5.球不同 , 盒不同 , 不可空

[huge ans = m! S2[n][m] ]

就是因为盒不同 , 所以乘上一个(m!) ,表示盒子也是有序的。

6.球不同 , 盒相同 , 可空

[huge ans = sum_{i=1}^{m}S2[n][i] ]

就是枚举用了几个盒子 , 加起来就行了 。

这个似乎就是贝尔数 , bell

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

贝尔数的相应公式为

[huge B_{k+1} = sum_{i=0}^{k}C_n^kB_k ]

即枚举包含最后一个元素的集合大小

7.球相同 , 盒相同 , 可空

考虑dp

(f[i][j]) 表示 i 个球放入 j 个盒子的方案数 。

边界

j = 1 || i = 0 , (f[i][j] = 1)

case 1

球比盒子少 , 由于盒子是相同的所以 (f[i][j] = f[i][i]) 也就是怎么也是放不满 , 只要盒子 >= 球 , 方案就是一样的。

case 2

球比盒子多 , 就分为 放满与没有放满的情况 ,

(huge f[i][j] = f[i-j][j] + f[i][j-1])

第一个对应放满 , 第二个对应没有放满。

8.球相同 , 盒相同 , 不可空

[huge ans = f[n-m][m] ]

既然不可空 , 那我都先放一个就行了, 反正球都一样。。。

原文地址:https://www.cnblogs.com/R-Q-R-Q/p/12190190.html