盒子与球系列

文章详细阐述了不同条件下的球放入盒中的组合问题,包括球相同盒不同、球相同盒相同、球不同盒相同等场景,涉及组合计数、动态规划和斯特林数等数学概念,讨论了无空盒和可空盒的情况,并给出了相应的解决方案和公式转换。
摘要由CSDN通过智能技术生成

1. 球相同,盒不同,无空盒

因为球是相同的,所以我们只需要把球挨个放在一排进行选择就行了

在这里插入图片描述

我们发现,如果我们在某两个元素中间放一块板子来将其隔开:

在这里插入图片描述

这样一来,我们塞一个板子就可以得到 2 2 2 个集合,要有 m m m 个集合,就需要塞 m − 1 m-1 m1 个板子 ,而在 n n n 的元素只有 n − 1 n-1 n1 个空隙拿来塞板子,所以原问题转化为:求在 n − 1 n-1 n1 个位置中塞 m − 1 m-1 m1 个板子的组合数(因为盒子相同,所以是组合数),即 C n − 1 m − 1 C_{n-1}^{m-1} Cn1m1

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

基本思想与球相同,盒不同,无空盒情况相同,但是比较抽象:我们需要一种空球

就是这个样子:

在这里插入图片描述

假设有 m m m 个盒子,我们就再另外准备 m m m 个空球,这样,就可以出现空盒的情况(在一个盒子里只塞空球)。

这样一来,问题就成了:

n + m n+m n+m 个相同的球和 m m m 个不同的盒子,在无空盒的情况下,有几种放法?

问题就成了球相同,盒不同,无空盒,套公式,最终答案为 C n + m − 1 m − 1 C_{n+m-1}^{m-1} Cn+m1m1

3. 球不同,盒相同,无空盒

对于这种问题,和第二类斯特林数有着很大的关系。因为第二类斯特林数就是求这种问题的方案总数

这里,我们采用dp来解决这一类问题

定义状态:

dp[i][j]表示前 i i i 个球放入 j j j 个盒子的方案总数(这里注意一个细节:由于盒子是相同的,所以,定义状态的描述是放入j个盒子,而不是放入前j个盒子

先给状态转移方程式:

d p [   i   ] [   j   ] = d p [   i − 1   ] [   j − 1   ] + j × d p [   i − 1   ] [   j   ] dp[\ i\ ][\ j\ ]=dp[\ i-1\ ][\ j-1\ ]+j\times dp[\ i-1\ ][\ j\ ] dp[ i ][ j ]=dp[ i1 ][ j1 ]+j×dp[ i1 ][ j ]

解释一下:

假设我们当前要放入 i i i 号球,那么,有两种放入方法

  1. 这个球单独占了一个盒子
  2. 这个球与前 i − 1 i-1 i1 个球共占 j j j 个盒子

对于情况 1 1 1,其对应的结果就是dp[i-1][j-1]

对于情况 2 2 2,其对应的结果就是j*dp[i-1][j]

为什么要*j呢?由于球是不相同的,而且有 j j j 个盒子可供选择,所以,根据乘法原理,我们需要*j

最终答案存储在dp[n][m]

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

球不同,盒相同,无空盒基本类似,但是,由于可空盒,这就意味着,无论你是放 1 1 1 个盒子还是 2 2 2 个盒子,都是合法的,所以,在 球不同,盒相同,无空盒的dp基础上,最终答案为: ∑ i = 1 m d p [   n   ] [   i   ] \sum\limits_{i=1}^mdp[\ n\ ][\ i\ ] i=1mdp[ n ][ i ]

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

我们来回忆一下球不同,盒相同,无空盒的情况

思考:如果我们先把小球放进盒子之后,在对盒子进行一个全排列的排序,那么,在盒相同的情况下,这样是没有意义的,因为这样的到的答案本质上是相同的,但是,在盒不同的情况下,这样得到的答案本质上是不同的(因为盒子排序的过程就相当于把盒子内的小球进行集体迁移,由于盒不同,所以得到的方法必然是不同的)

那么,在 球不同,盒相同,无空盒的dp基础上,最终答案为:dp[n][m]*(m!)

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

这东西就是一个㵘淼沝水

由于球和盒子都是不同的,还允许空盒,所以,直接一个乘法原理,就得到了答案: m n m^n mn

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

由于盒相同,所以,我们就假设左边的盒子里的球一定小于等于右边盒子里的球

就是这样:

在这里插入图片描述

考虑dp

定义状态:

dp[n][m]表示将 n n n 个球放入 m m m 个盒子里的方案总数

由于不能有空盒存在,所以,我们可以先给每一个盒子放一个球

此时,我们还剩下 n − m n-m nm 个球

剩下的球我们只能放在前 i ( 1 ≤ i ≤ m ) i(1\le i\le m) i(1im) 个盒子里(为了保证先前的假设成立),相当于dp[n-m][i]

综上,得到了状态转移方程式:

d p [   i   ] [   j   ] = ∑ k = 1 j d p [   i − j   ] [   k   ] dp[\ i\ ][\ j\ ]=\sum\limits_{k=1}^jdp[\ i-j\ ][\ k\ ] dp[ i ][ j ]=k=1jdp[ ij ][ k ]

边界比较复杂:

d p [   i   ] [   j   ] = { 1 j = 1   or ⁡   i = j 0 i < j dp[\ i\ ][\ j\ ]=\begin{cases}1&j=1\ \operatorname{or}\ i=j\\0&i<j\end{cases} dp[ i ][ j ]={10j=1 or i=ji<j

最终答案为dp[n][m]

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

球相同,盒相同,无空盒的情况类似,但是,需要借鉴一下球相同,盒不同,可空盒的空球思想

我们在另外准备 m m m 个空球,和原有的 n n n 个球放在一起

这样,问题就变成了球相同,盒相同,无空盒,在原dp基础上,最终答案为dp[n+m][m]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值