• 小球放盒子 (组合数总结)


    对于小球放盒子问题,可分为以下的八种情况。

    (1、)盒子相同,球相同,不允许空。

      这个其实就相当于整数划分问题,就是把球看做数字,把盒子看做每一份。设(f[i][j])为考虑了前(i)个,分成了(j)份,转移方程为:

    [f[i][j]=f[i-1][j-1]+f[i-j][j] ]

    (2、)盒子相同,球相同,允许空。

      这个东西就是刚刚求的那个整数划分的前缀和。

    (3、)盒子相同,球不同,不允许空。

      第二类斯特林数,设(f[i][j])表示处理了前(i)个球 ,用了(j)个盒子,转移方程为:

    [f[i][j]=f[i-1][j-1]+f[i-1][j]*j ]

      这个东西的含义就是讨论当前新加入的球要放哪,第一种放法就是再开一个盒子:(f[i][j]+=f[i-1][j-1]),第二种方法就是在前面的(j)个盒子里随便挑一个放进去,因为有(j)个盒子,所以(f[i][j]+=f[i-1][j]*j)

    (4、)盒子相同,球不同,允许空。

      第二类斯特林数的前缀和。其实就是看最后放了几个盒子,剩下的都是空的,加起来即可。

    (5、)盒子不同,球相同,不允许空。

      比较经典的隔板法,把(m)盒子看做(m-1)个木板,然后要插入到(n-1)个空隙里,所以答案就是(large C_{n-1}^{m-1})

    (6、)盒子不同,球相同,允许空。

      这个就是上一个的变形,可以添加(m)个小球放到这(m)个盒子里,这样就保证了盒子非空,答案就是(large C_{n+m-1}^{m-1})

    (7、)盒子不同,球不同,不允许空。

      这个是第二类斯特林数(*m!),具体怎么证明不太会,好像就是把斯特林数换一种写法 ,然后消掉有序性。

    (8、)盒子不同,球不同,允许空。

      对于每一个小球都可以放到(m)个盒子里,答案就是(m^n)

  • 相关阅读:
    UML类图与类的关系详解
    UML用例图总结
    jQuery随机抽取数字号代码
    贪心算法
    回溯法实例详解(转)
    React 表单元素实例
    React 组件嵌套 父子关系
    React 滚动事件
    error: Error trying to parse settings: Unexpected trailing characters in PackagesUserPreferences.sublime-settings:9:2 reloading settings Packages/User/Preferences.sublime-settings
    jquery 下拉框左右选择
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9838857.html
Copyright © 2020-2023  润新知