zoukankan      html  css  js  c++  java
  • 小球放盒子 (组合数总结)

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

    (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)

  • 相关阅读:
    URAL 1998 The old Padawan 二分
    URAL 1997 Those are not the droids you're looking for 二分图最大匹配
    URAL 1995 Illegal spices 贪心构造
    URAL 1993 This cheeseburger you don't need 模拟题
    URAL 1992 CVS
    URAL 1991 The battle near the swamp 水题
    Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
    Codeforces Beta Round #7 D. Palindrome Degree hash
    Codeforces Beta Round #7 C. Line Exgcd
    Codeforces Beta Round #7 B. Memory Manager 模拟题
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9838857.html
Copyright © 2011-2022 走看看