n个球n个袋子

前言: n个球,n 个袋子,看似简单,但是有不同问法以及相应的解法。

问题一:将n个相同的球放到m个不同的袋子里有多少种方案?
解答:(因为球相同,所以只是关注袋子里球的个数即可)
  • 题外话:

    课堂上讲的是隔板法,我认为这个方法有点儿不太贴切,如果把题目加上一个条件即每个袋子不为空,则隔板法名副其实。若加上这个条件,则可以这样做,即相当于将n个球排列成一排,这样n个球中间会有n-1个空隙,这样可以将 m 个袋子放进这 n-1 个空隙中,所以答案为 C n − 1 m C_{n-1}^m Cn1m

  • 主线:

    有了题外话的思路我们可以顺着此思路,但存在一个问题是当一个袋子可以为空的话,无论怎么把球隔开都不能满足条件。所以解决思路虽然与隔板法相似,但我认为用选取法更容易理解。即将n + m - 1 个东西摆成一排,从中选取 m-1 个东西当作袋子。

    为什么不是 n+m个东西中选m个袋子呢?因为只要选取 m - 1 个袋子(选的这个袋子与前一个袋子之间的球就认定要放进这个袋子),这样一排摆 n + m -1个的原因也不言而喻了。所以答案就是 C n + m − 1 m − 1 C_{n+m-1}^{m-1} Cn+m1m1

问题二:将n个不同的球放到m个不同的袋子里有多少种方案?
解答:(因为都不同,所以任何一种方法都不同)

没什么可说的,直接输出 m n m^n mn即可。

问题三:将n个不同的球放到m个相同的袋子里有多少种方案?
解答:(因为球不同,袋子相同,所以除了数量以为,球之间的组合关系也要考虑在内)
  1. 用f[i][j]表示将i个不同的球放到j个相同的袋子,并保证每个袋子里都有球的方案数。
  2. 考虑第i个球是不是单独放的。
  3. f[i][j]=f[i-1][j-1]+f[i-1][j]*j。
  4. 答案是f[n][0]+f[n][1]+…+f[n][m]。
  5. 时间复杂度O(nm)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Drdajie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值