• 小球与盒子的故事


    小球和盒子是非常经典(烂大街)的一种模型,以小球和盒子的爱恨情仇为背景,对把小球放到这个盒子里还是那个盒子里进行的一系列哲学问题探讨以及珂学形态分析,其中基本会涉及到组合数学(雾)和计数DP(雾)。

    --- 这话说滴对!

    n 个球 , m 个盒

    1.球相同 , 盒不同 , 不能有空盒

    [huge ans= C(n - 1 , m - 1) ]

    意思是把 n 个球放入分成 m 份 , 利用隔板法的思想 , 在 总共的 n - 1 个空隙中 , 选出m - 1 个空隙就可以了。

    2.球相同 , 盒不同 , 可以有空盒

    [huge ans = C(n + m - 1 , m - 1) ]

    就是 再插入m个隔板表示这个位置可以为空 , 总共就有了 n + m - 1 个隔板。

    3.球不同 , 盒不同 , 可空

    [huge ans = m^n ]

    这个是最简单的 。 n 个球,每个都可以有 m 中选择。

    4.球不同 , 盒相同 , 不可空

    [huge ans = S2[i][j] ]

    也就是第二类斯特林(加特林)数。

    第二类斯特林数S(n,m)

    表示的是把n个不同的小球放在m个相同的盒子里方案数 , 不可空
    递推公式

    容斥原理

    即枚举空盒的个数,剩下的随意放置,由于盒子是相同的最后要除以m!

    5.球不同 , 盒不同 , 不可空

    [huge ans = m! S2[n][m] ]

    就是因为盒不同 , 所以乘上一个(m!) ,表示盒子也是有序的。

    6.球不同 , 盒相同 , 可空

    [huge ans = sum_{i=1}^{m}S2[n][i] ]

    就是枚举用了几个盒子 , 加起来就行了 。

    这个似乎就是贝尔数 , bell

    Bell数的定义:第n个Bell数表示集合{1,2,3,...,n}的划分方案数

    贝尔数的相应公式为

    [huge B_{k+1} = sum_{i=0}^{k}C_n^kB_k ]

    即枚举包含最后一个元素的集合大小

    7.球相同 , 盒相同 , 可空

    考虑dp

    (f[i][j]) 表示 i 个球放入 j 个盒子的方案数 。

    边界

    j = 1 || i = 0 , (f[i][j] = 1)

    case 1

    球比盒子少 , 由于盒子是相同的所以 (f[i][j] = f[i][i]) 也就是怎么也是放不满 , 只要盒子 >= 球 , 方案就是一样的。

    case 2

    球比盒子多 , 就分为 放满与没有放满的情况 ,

    (huge f[i][j] = f[i-j][j] + f[i][j-1])

    第一个对应放满 , 第二个对应没有放满。

    8.球相同 , 盒相同 , 不可空

    [huge ans = f[n-m][m] ]

    既然不可空 , 那我都先放一个就行了, 反正球都一样。。。

  • 相关阅读:
    JavaScript对原始数据类型的拆装箱操作
    Javascript继承(原始写法,非es6 class)
    动态作用域与词法作用域
    自行车的保养
    探索JS引擎工作原理 (转)
    C语言提高 (7) 第七天 回调函数 预处理函数DEBUG 动态链接库
    C语言提高 (6) 第六天 文件(续) 链表的操作
    C语言提高 (5) 第五天 结构体,结构体对齐 文件
    C语言提高 (4) 第四天 数组与数组作为参数时的数组指针
    C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
  • 原文地址:https://www.cnblogs.com/R-Q-R-Q/p/12190190.html
Copyright © 2020-2023  润新知