“n个球放到m个盒子”问题整理

n个球放到m个盒子

以8个球放到3个盒子为例

1 球同,盒同,可空

思路一:8个球放到3个盒子

    取球最少盒子取0个球取球第二少的盒子取[0,4] 
    取球最少盒子取1个球取球第二少的盒子取[1,3] 
    取球最少盒子取2个球取球第二少的盒子取[2,3] 
    一共5+3+2=10种 

    类似于 整数拆分 包含0  非递减序
    8 = 0 + 0 + 8
        + 1 + 7
        + 2 + 6
        + 3 + 5
    8 = 1 + 1 + 6
        + 2 + 5
        + 3 + 4
    8 = 2 + 2 + 4
        + 3 + 3

思路二:

    有n个球,和m个盒子,我可以选择在所有盒子里面都放上1个球,也可以不选择这个操作,
    如果选择了这个操作,那么就从dp[n-m][m]转移过来
    如果没有选择这个操作,那么就从dp[n][m-1]转移过来

    dp[n][m]:n个相同的球放入m个相同的盒子的放法

    边界条件:
        k个球放入一个盒子只有一种放法:dp[k][1] = 1
        一个球放入k个盒子只有一种放法:dp[1][k]=1
        没有球只有一种放法(都不放):dp[0][k]=1
    状态转移方程:
        dp[n][m] = dp[n][m-1] + dp[n-m][m] ,    n>=m
        dp[n][m] = dp[n][m-1] ,    n<m


2 球同,盒同,不空

思路一:

8个相同的球放进3个相同的盒子里,每盒至少一个
取球最少的盒子取1个球,取球第二少的盒子可以取[1,3]   3种 
取球最少的盒子取2个球,取球第二少的盒子可以取[2,3]   2种 
取球最少的盒子取3个球,此情况不存在,一共5种 
按取球多寡来分类讨论可以做到不遗漏,不重复

类似问题:整数拆分,非递减序
8 = 1 + 1 + 6
    + 2 + 5
    + 3 + 4
8 = 2 + 2 + 4
    + 3 + 3

思路二:

因为要求无空箱,我们先在每个箱子里面放1个球,然后还剩下n-m个球了,就转化成了情况1了


3 球不同,盒同,不空

思路一:

 取球最少盒子取1个球时,有116,125,134三种情况,分别有C(8,6)=28, C(8,1)*C(7,2)=168, C(8,1)*C(7,3)=280 
   取球最少盒子取2个球时,有224,233二种情况,分别有C(8,2)*C(6,2)/2=210,C(8,3)*C(5,3)/2=280 
   一共28+168+280+210+280=966

思路二:第二类斯特林数

    对于第n个球,
      如果前面的 n-1 个球已经放在了 m    个箱子里,那么现在第 n 个球放在哪个箱子都是可以的,所以  m*dp[n-1][m]
      如果前面的 n-1 个球已经放在了 m-1 个箱子里,那么现在第 n 个球必须要新开一个箱子来存放,所以  dp[n-1][m-1]

    dp[n][m]:n个不同的球放入m个相同的盒子的放法,不空
    边界条件:
      k个不同球放入k个相同的盒子,不空放法只有一种: dp[k][k] = 1,   k>=0
      k个不同球放入0个盒子,dp[k][0]=0, k>=1
      n个不同球放入m个盒子,球不够,盒子会空,dp[n][m]=0, n<m       
    状态转移方程:
      dp[n][m] = m*dp[n-1][m]  + dp[n-1][m-1]  ,     1<=m<n


4 球不同,盒同,可空

    一种解法同情况3的思路一,对于情况1(球同,盒同,可空)的各种组合,分别讨论;

     另一种解法:情况7中的一般情况(3个元素都相异),比如116,一共有6种排列(球是不同的),此问中,盒子是相同的,因此这6种排列都只算一种情况。但如果2个元素相同的时候,有且只有 008,只有3种排列,我们多添加3种进去,令其也重复6次,则(6561+3)就是 所有的情况都重复了6次,(6561+3)/6=1094即为所求。


5 球同,盒不同,不空

    插板法:     C(n-1, m-1)

    n个球有n+1个空,但是不能为空,两端的空不能选,剩n-1个空;m个盒子,只需要m-1个板即可分成m份


6 球同,盒不同,可空

    我们在情况5下继续讨论,我们可以先假设m个盒子里都放好了1个球,所以说白了就是,现在有m+n个相同的球,要放入m个不同的箱子,没有空箱。也就是情况5


7 球不同,盒不同,可空

    每个球都有3种选择,8个球就有3^8=6561  


8 球不同,盒不同,不空

思路一:
   情况3中的966种情况,每种情况的三个元素都是互异的,比如 116(因为球是不同的),
   这三个元素进行全排列A(3,3)=6,乘以966=5796即为所求

思路二:

   因为球是不同的,所以dp[n][m]得到的盒子相同的情况,只要再给盒子定义顺序,就等于现在的答案了
   dp[n][m] * fact[m] , dp[n][m] 为情况3的第二类斯特林数,fact[m]为m的阶乘


参考资料:

[数算] 『原创』管中窥豹,8道排列组合题解析


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值