zoukankan      html  css  js  c++  java
  • 组合计数

    组合计数

    基础知识

    基本知识 (:)

    (n!=1 imes 2 imes 3 imes ... imes (n-1) imes n)

    (n) 个元素的全排列有 (n!) 种.

    引例 (1:)

    (n) 个人中挑选 (m) 个人排成一队,共有多少种可能的队列.

    (Sol:)

    考虑形成的队列的 (m) 个位置,第一个位置有 (n) 个人可供选择,第二个位置有 (n-1) 个人可供选择(因为一个人不可能同时在队列的两个位置),以此类推.

    由乘法原理,得到总方案是 (n imes (n-1) imes ... imes (n-m+1))

    上式显然可写作:(cfrac{n!}{(n-m)!}) , 记 (A_n^m = cfrac{n!}{(n-m)!})

    其意义如引例所述.

    引例 (2:)

    (n) 个人中挑选 (m) 个人组成一个小队,共有多少种可能的队员组成.

    (Sol:)

    这个问题显然是无序的,因此我们只需要在上一个方案数的基础上去把内部的排列顺序除掉即可.

    于是总方案就是 (cfrac{A_n^m}{m!}) , 记 (C_n^m = cfrac{A_n^m}{m!} = cfrac{n!}{m!(n-m)!})

    其意义如引例所述.

    计数模型

    下面给出一些常见的计数模型 (:)

    规定 (L) 为可区分 , (U) 为不可区分 , (A,B,C) 分别为无限制,非空,至多一个.

    一个给定问题描述为 (???) , 其中前两个字符一定为 (L,U) 中的一个 , 最后一个字符一定是 (A,B,C) 中的一个 , 例如 (LUA) , 表示 可区分的小球放入不可区分的盒子,无限制的方案数.

    1.LLA

    每个盒子都有 (n) 种选择,所以答案就是 $$m^n$$ .

    2.LLB

    考虑容斥,枚举有多少个盒子为空,若有 (i) 个盒子为空,则此时方案数为 (C_m^i imes (m-i)^n) , 所以答案为

    [sum_{i=0}^m{(-1)^i imes C_m^i imes (m-i)^n} ]

    3.LLC

    就是 (A_n^m) 对叭.

    4.LUB

    (2) 相比,只是少了有序性,所以直接除以 (m!) 即可.

    所以答案就是 $$(m!){-1}sum_{i=0}m{(-1)^i imes C_m^i imes (m-i)^n}$$

    值得一提的是,这就是第二类斯特林数的单项容斥形式.

    5.LUA

    考虑和上一个问题的区别,枚举用了几个盒子(即有多少盒子不为空),就转化成了和上一个问题一样的模型.

    这里考虑一个上个问题的递推式,也就是第二类斯特林数的递推式.

    [S_{i,j}=S_{i-1,j} imes j + S_{i-1,j-1} ]

    组合意义十分显然,每次来一个新小球,考虑它是放在以前的盒子里还是开一个新盒子,如果放在以前的盒子里,显然放在任意一个都可以.

    那么这个题的答案就是 (S_{i,j}) 的某一行之和.

    所以答案为 $$sum_{i=0}^m{S_{n,i}}$$

    6.LUC

    因为球必须都放完,所以如果 (n>m) 无解,且如果 (nle m) , 你不管怎么放都是一种方案,所以答案就是 $$[nle m]$$ .

    (:[x]) 表示 (x) 表达式的布尔值.

    7.ULB

    冷静分析 (:) 你发现这相当于把 (n) 个小球划分成 (m) 个连续的段 (...)

    于是我们使用插板法, (n) 个球共有 (n-1) 个位置,划分成 (m) 段需要插入 (m-1) 个板子,所以我们需要在 (n-1) 个空位中选取 (m-1) 个位置放板子.

    所以答案就是 $$C_{n-1}^{m-1}$$

    8.ULA

    你发现这个东西和上一个东西相比,盒子可以为空,也就是允许我们在同一个位置插两个板子.

    这就不能直接算了,那么怎么办呢?

    考虑我们先在每一个盒子中放一个小球,这样就转化成了上一个问题,什么?你问为什么?

    因为新问题中 (size)(1) 的段就能表达原问题的空段.

    所以答案就是 $$C_{n+m-1}^{m-1}$$

    9.ULC

    因为必须要把球放完...所以如果 (n<m) 则必然无解.
    而如果 (nle m) , (emmmm...)
    好像...只需要选出 (n) 个盒子来放球就好了...

    所以答案就是 $$C_m^n$$

    10.UUB

    这个问题其实和整数划分满足双射关系 (...)

    答案就是划分数啦.

    [P_{i,j}=P_{i-1,j-1} + P_{i-j,j} ]

    组合意义的话,考虑这个位置是放一个 (1) 还是放一个 (j) , 易证这样就能构造出所有的情况.

    11.UUA

    这里我们使用和隔板法的扩展同样的思路.

    答案就是 $$P_{n+m,m}$$

    12.UUC

    因为必须要把球放完...所以如果 (n<m) 则必然无解.
    而如果 (nle m) , (emmmm...)
    这怎么放真的有区别嘛 (...)

    所以答案就是 $$[nle m]$$.

    (:[x]) 表示 (x) 表达式的布尔值.

    Ex.1

    捆绑法.
    大约是某两个元素或者某多个元素必须相邻之类的限制.
    直接把有限制的元素视作一个元素即可.

    Ex.2

    优先安排法.
    大概就是某个元素必须在哪,你就把它放哪里不动就完了.

    Ex.3

    容斥法.这个相信不用说.

    Ex.4

    (n) 个有标号的小球,标号为 (1)(m) ,其中有一些小球的标号相同,第 (i) 种标号的小球有 (n_i) 个.
    求总共有多少种不同的排列方案.

    先把所有的小球看作互异的小球,此时方案为 (n!) .

    再把每种小球内部的排列顺序除掉,所以答案就是 $$cfrac{n!}{Pi_{i=1}^{m}{n_i}}$$

    大概可能基本上就只能考到这些东西,或者是它们的任意组合,或者加入一些其他的限制,通常这些问题容斥即可解决.

  • 相关阅读:
    异步无刷新上传文件而且上传文件能够带上參数
    利用BADI WORKORDER_INFOSYSTEM在COOIS中加入自己定义列办事处
    Printf可变參数使用
    评大北农今日复牌公告
    iOS Sprite Kit教程之申请和下载证书
    UVa 12587 Reduce the Maintenance Cost(Tarjan + 二分 + DFS)
    Python: scikit-image Blob detection
    linux命令ps aux|grep xxx详解
    复制和重命名表格--修改表注释
    md5 破解网站
  • 原文地址:https://www.cnblogs.com/Equinox-Flower/p/11711562.html
Copyright © 2011-2022 走看看