排列组合问题 “n个球放入m个盒子(8种)”

1.球相同,盒相同,允许空箱

2.球相同,盒相同,无空箱

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

4.球相同,盒不同,允许空箱

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

6.球不同,盒相同,允许空箱

7.球不同,盒不同,无空箱

8.球不同,盒不同,允许空箱

 

n个球放入m个盒子

一共是上述八种情况,现在具体来思考一下分别应该怎么做

 

1.球相同,盒相同,允许空箱

   n个球,m个盒子,两种选择,一个是把所有箱子都放一个球,这样的话就和 dp[n-m][m]相同了

                                                    不这么做,这样就和dp[n][m-1]相同了

                                                    因为球和盒子都相同,还允许空的

  所以:

          ①dp[n][m]=dp[n][m-1]+dp[n-m][m], n>=m
          ②dp[n][m]=dp[n][m-1], n<m
          边界dp[k][1]=1,dp[1][k]=1,dp[0][k]=1

2.球相同,盒相同,无空箱

   现在有n个球和m个箱子,无空箱的话,先每个箱子放一个球  剩n-m个球,结果就是dp[n-m][m] 了,同上

        ①dp[n-m][m],dp同第7种情况,n>=m
        ②0, n<m

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

    插板法:n个球中间有n-1个间隙,在里面选出m-1个间隙来  就行

    ①n>=m,C(n-1,m-1);

    ②n<m,0

4.球相同,盒不同,允许空箱

      给每个盒子一个球,即转化成了不允许空箱的情况

     C(n+m-1,m-1);

5.球不同,盒相同,无空箱   (第二类斯特林数

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

      如果前n-1个球已经放在了m-1个箱子里,那么现在第n个球必须要新开一个箱子来存放,所以dp[n-1][m-1]

      所以:

     ①dp[n][m]=m*dp[n-1][m]+dp[n-1][m-1],1<=m<n
         dp[k][k]=1,k>=0
         dp[k][0]=0,k>=1
     ②0,n<m

6.球不同,盒相同,允许空箱

    先把不允许空箱的所有情况都算出来,再把n个球时的所有情况做一个累加

    sigma dp[n][i],0<=i<=m;

7.球不同,盒不同,无空箱

     dp[n][m]是盒子相同时的情况,如果盒子不同的话,球不同时的情况应该乘上盒子(m)的阶乘

   dp[n][m]*m的阶乘

8.球不同,盒不同,允许空箱

   这个应该是最好想的一种情况

   m的n次方   每一个球都有m中选择;

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值