排列组合:球盒问题

排列组合:球盒问题

有n个球和m个盒子,根据是否允许为空,球是否相同,盒子是否相同分成8种情况

前置知识:第二类斯特林数

1.允许为空、球不相同、盒子不相同

  • 给每个球选择它的盒子,所以结果为mn

2.不允许为空、球不相同、盒子不相同

  • 假设盒子相同,这个问题就转换为将n个元素分成m个集合,然后对盒子全排列即m!,所以结果就为m!S(n,m)

3.允许为空、球相同、盒子不相同

  • 假设不允许为空,并且球数为n+m 个,那么结果为C(n+m1,m1),再给所有的盒子取出一个球,结果不变,所以为C(n+m1,m1)

4.不允许为空、球相同、盒子不相同

  • 插板法,n个球就有n-1个空,插入m-1个板子,所以结果为C(n1,m1)

5.允许为空、球不同、盒子相同

  • 第6问的求和,S(n,1) + S(n,2) + ... + S(n,m)

6.不允许为空、球不同、盒子相同

  • 就是n个元素分为m个集合,S(n,m)

7.允许为空、球相同、盒子相同

  • 分解,有空盒和没有的情况
  • 有空盒时,与去掉一个空盒的情况数量相同
  • 没有时,转换为问题8
  • 又根据问题8可以转换为7,得出结果为ans(n,m)=ans(n,m1)+ans(nm,m)
  • 为了简化,n小于m时,直接令ans(n,m)=ans(n,n)省去不必要的计算

8.不允许为空、球相同、盒子相同

  • 所以盒子里的球全减少1个,转换为问题7,ans8(n,m)=ans7(nm,m)
posted @   xxcdsg  阅读(233)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示