正睿OI游记(Day0x04)组合数学计数专题

目录

  • Day 0x04 “简单”的组合计数
    • 加法原理和乘法原理和排列组合
    • 二项式定理
    • 插板法和一些简单组合
    • 卡特兰数
    • 多项式系数
    • Twelvefold way
      • 第二类斯特林数
      • 划分数
    • 作业

Day 0x04 “简单”的组合计数

加法原理和乘法原理和排列组合

这没啥好讲的吧-_-。

乘法原理小练习:

给定\(n\)个像\(1\le x_i\le a_i\)这样的约束条件求使\(x_i\)两两不同的方案数。

\(a_i\)排序,答案即为\(\prod\limits_{i=1}^n(a_i-i+1)\)

二项式定理

\((x+y)^n=\sum\limits^n_{i=0}\dbinom{n}{i}x^iy^{n-i}\)

\(x=1,y=1\)\(2^n=\sum\limits^n_{i=0}\dbinom{n}{i}\)

\(\dbinom{n+k}{k}=\sum\limits^k_{r=0}\dbinom{n+r-1}{r}​\)

通过杨辉三角(画张图)即可证明。

插板法和一些简单组合

1.求\(x_1+x_2+\cdots+x_m=n\)正整数解个数

\(n​\)个球,\(n-1​\)个空隙,插\(m-1​\)个板。

答案即为\(\dbinom{n-1}{m-1}​\)

2.非负整数解个数。

每个数加一即化为正整数解个数。

答案即为\(\dbinom{n+m-1}{m-1}​\)

3.共有\(\dbinom{n+k}{k}\) 个字符串含有k个1,n个0。

4.共有\(\dbinom{n+1}{k}​\) 个字符串含有k个1,n个0,两个1不能相邻。

我们补一个0(保证结尾一定为0,最后再去掉)将10捆绑起来:

则有k个10\(n-k+1​\)个0

答案即为\(\dbinom{n-k+1+k}{k}=\dbinom{n+1}{k}​\)

5.\(\dbinom{a+b}{n}=\sum\limits_{i=0}^n\dbinom{a}{i}\dbinom{b}{n-i}​\)

\(\dbinom{a-b}{n}=\sum\limits_{i=0}^n\dbinom{a}{i}\dbinom{-b}{n-i}\)

定义负数组合数\(\dbinom{-b}{n}=\dfrac{(-b)*(-b-1)*\cdots(-b-n+1)}{n!}\)

卡特兰数

定义卡特兰数\(C_0=1\)并且\(C_{n+1}=\sum\limits_{i=0}^nC_i*C_{n-i}\)

\(C_n=\dfrac{1}{n+1}\dbinom{2n}{n}=\dbinom{2n}{n}-\dbinom{2n}{n-1}\)

1,1,2,5,14,42,132,429,1430…

有2n个括号的合法括号序列列个数。

有n个非叶子节点的满⼆叉树的个数

1563588026166.png

不超过对角线的NE lattice path的个数

正睿OI游记(Day0x04)组合数学计数专题_第1张图片

多项式系数

\[ (x+y+z)^n=\sum\limits_{i+j+k=n}\dbinom{n}{i,j,k}x^iy^jz^k \\其中: \\\dbinom{n}{k_1,k_2,\cdots,k_m}=\dfrac{n!}{\prod\limits_{i=1}^mk_i!} \\\sum k_i=n \]
这里的\(\dbinom{n}{k_1,k_2,\cdots,k_m}\)就是多重集的组合。

意义是将\(n\)分为多个集合(每个集合的大小分别为\(k_1,k_2,\cdots,k_m​\))的方案数。

给一道例题:

给你一棵\(n\)个节点的有根树。你要给每个节点分配一个\(1\to n\)的数字,
使得每个节点分配的数字不同,并且每个节点分配的数字都是它子
树内最小的。求方案数。

解法:

考虑其中某棵子树\(u\)被分配到的数字集是\(\{p_1,p_2,\cdots,p_{size(u)}\}(p_i\(u\)节点的值就是\(p_1\)

接下来将剩下\(size(u)-1\)个数分给它的儿子\(v_1,v_2,\cdots,v_k\)

方案即为\(\dbinom{size(u)-1}{size(v_1),size(v_2),\cdots,size(v_m)}\)

所以考虑树形DP。
\(dp[u]\)表示以节点u为子树的方案数。
\(dp[u] =\dbinom{size(u)-1}{size(v_1),size(v_2),\cdots,size(v_m)}*\prod\limits_{i=0}^kdp[{v_i}]\)

我们令\(P(i)=\dfrac{dp[i]}{size(i)!}\)

大力推一波式子
\[ \begin{align} dp[u] &=\dbinom{size(u)-1}{size(v_1),size(v_2),\cdots,size(v_m)}*\prod\limits_{i=0}^kdp[{v_i}] \\&=\dfrac{(size(u)-1)!}{size(v_1)!size(v_2)!\cdots size(v_m)!}*\prod\limits_{i=0}^kdp[{v_i}] \\&=(size(u)-1)!*\prod\limits_{i=0}^kP(v_i) \\&=\dfrac{size(u)!}{size(u)}*\prod\limits_{i=0}^kP(v_i) \end{align} \]

移项后可得
\(P(u)=\dfrac{1}{size(u)}*\prod\limits_{i=0}^kP(v_i)\)
将后式不断展开,可以得到
\(P(u)=\prod\limits_{v在u子树内}\dfrac{1}{size(v)}\)

得到\(P(1)=\prod\limits_{i=1}^n\dfrac{1}{size(v)}\)

所以\(dp[1]=P(1)*n! \\ =n!*\prod\limits_{i=1}^n\dfrac{1}{size(v)}\)

Twelvefold way

n个有标号/无标号的球分给m个有标号/无标号的盒子
盒子有三种限制:
A)无限制
B)每个盒子至少有一个球
C)每个盒子至多有一个球
共12种问题

为了了方便便 将有标号记为L(labelled) 无标号记为U(unlabelled)
那么一个问题可以用缩写代替 如UUA

  1. (LLA)n个有标号的球分给m个有标号的盒子\(m^n​\)

  2. (ULA)n个无标号的球分给m个有标号的盒子
    等同于方程的整数解个数 \(\dbinom{n+m-1}{m-1}​\)

  3. (ULB)n个无标号的球划分给m个有标号的盒子 不能有空盒
    等同于方程的整数解个数 \(\dbinom{n-1}{m-1}​\)

  4. (LLC)n个有标号的球分给m个有标号的盒子 每个盒子至多放一个球

    \(A_m^n​\)

  5. (ULC)n个无标号的球分给m个有标号的盒子 每个盒子至多放一个球\(A_m^n​\)

  6. (LUC)n个有标号的球分给m个无标号的盒子 每个盒子至多放一个球
    \([n\le m]​\)

  7. (UUC) n个⽆无标号的球分给m个无标号的盒子 每个盒⼦至多放一个球
    \([n\le m]​\)

  8. (LLB)n个有标号的球划分给m个有标号的盒子 不不能有空盒
    使⽤用容斥原理:
    \(S(a_1,a_2,\cdots,a_k)​\)表示\(a_1,\cdots,a_k​\)都空了的情况

    \(ans=m^n-S(1)-S(2)-\cdots+(-1)^mS(1,2,\cdots,m)​\)

    所以答案为\(\sum\limits_{i=0}^m(m-i)^n(-1)^i\dbinom{m}{i}​\)
  9. (LUB) n个有标号的球划分给m个⽆无标号的盒⼦子 不不能有空盒
    为(LLB)的答案再除以m!

第二类斯特林数

(LUB)的答案是第二类斯特林数\(S(n,k)​\)

递推:\(S(n,m)=S(n-1,m-1)+mS(n-1,m)​\)

(LLB)也可以写成\(S(n,k)k!​\)

10.(LUA)n个有标号的球划分给m个无标号的盒子
枚举有几个盒子被分配了了

\(S(n,0)+S(n,1)+…+S(n,m)\)

划分数

\(p(n,k)​\)
\(n=x_1+x_2+…+x_k​\)
\(n​\)划分为\(k​\)个正整数的方案数 方案与\(x​\)的顺序⽆无关
\(4=1+1+1+1=2+1+1=2+2=3+1=4​\)
递推式:
考虑最小的数是否为1
\(p(n,k)=p(n-k,k)+p(n-1,k-1)​\)

几何意义young diagram

1563593233296.png

想象一下每一列表示一个盒子

这种状态表示\(10=3+2+2+2+1​\)

前一个转移表示往最下面加一行,即

\(10+5=(3+1)+(2+1)+(2+1)+(2+1)+(1+1)​\)

后一个转移表示往最右添1个。

\(10+1=3+2+2+2+1+1​\)

11.(UUB)n个无标号的球划分给m个无标号的盒子 每个盒子至少有一个球

\(p(n,m)\)

12.(UUA)n个无标号的球划分给m个无标号的盒子

枚举有几个盒子被分配了了

\(p(n,1)+p(n,2)+…+p(n,m)\)

可以在young diagram的第一行加m个方框

\(p(n+m,m)\)

作业

https://www.luogu.org/problemnew/show/P4071 错排问题

先让m个人恰好稳定。

剩下\(n-m\)必须不稳定。

所以\(ans=\dbinom{n}{m}*D_{n-m}\)

其中\(D_i\)表示错排数(即每个数都不稳定的方案数)

  1. 考虑\(D_n\)的递推。\(n\)能放在\([1,n)\)的其中一位置\(k​\)

    分情况讨论,若\(k​\)\(n​\)上,则还剩下\(n-2​\)个数没有确定位置,答案为\(D_{n-2}​\)

    \(k\)不在\(n\)上,那\(k\)也有限制(不能在\(n\)上),转化为\(D_{n-1}\)

    \(k\)\(n-1\)种取值,得到递推式\(D_i=(n-1)(D_{i-1}+D_{i-2})\)

  2. 考虑容斥。

    \(D_n=n!-\dbinom{n}{1}(n-1)!+\dbinom{n}{2}(n-2)!+\cdots+(-1)^n\dbinom{n}{n}(n-n)!​\)

    又有
    \[ \begin{align} \dbinom{n}{i}(n-i)!&=\dfrac{n!}{i!(n-i)!}*(n-1)! \\&=\dfrac{n!}{i!} \end{align} \]
    所以\(D_i=n!*\sum\limits_{i=0}^n(-1)^i\dfrac{1}{i!}\)

    前缀和求出后面的东西即可。

https://atcoder.jp/contests/agc025/tasks/agc025_b 组合数

简单题。

把绿色看成既涂红色也涂蓝色。

这样就可以红色蓝色分开计算。

枚举取\(A\)的个\(i\),可以算出取\(B\)的个数\(j\)

有乘法原理得答案+=\(\dbinom{n}{i}*\dbinom{n}{j}\)

https://www.luogu.org/problemnew/show/P2606 有根树模型

\(i*2\)\(i*2+1\)成为i的子树后问题转化为多项式系数的例题。

https://www.lydsy.com/JudgeOnline/problem.php?id=2729 数数+高精度

分两类情况讨论

  1. 两个老师中间只站着一个女生。这是两老师+一女生应该看做一个整体。

    答案即为\(A(n,n)\cdot A(n+1,1)\cdot A(2,2) \cdot A(n+2,m−1)​\)

  2. 两个老师中间不止站一个女生,这时中间一定有男生,于是随便插空就好了。
    \(A(n,n)\cdot A(n+1,2)\cdot A(n+3,m)​\)

高精即可

https://www.lydsy.com/JudgeOnline/problem.php?id=4402 转化+组合数

转自Claris' Blog

考虑给定每个数字的个数,构造出这个序列:

肯定是1 2 1 2 3 2 3 2 3 4 3 4 ... 最大值,

或者1 2 1 2 3 2 3 2 3 4 3 4 ... 最大值 最大值-1。

本质不同的情况只有这两种,且互相不交。

设最大值为\(m​\),那么\(1​\)\(m​\)都要有\(1​\)个,剩下的数每多一个\(i​\),就要多一个\(i+1​\)

剩下的数假设有\(t\)个,那么对于每种情况,等价于\(⌊t/2⌋\)个相同的球放入\(m\)个不同的盒子里,允许空盒的方案数,即​\(C(⌊t/2⌋+m,m)\)

枚举最大值后累加贡献即可,注意特判最大值为1的情况。

https://www.luogu.org/problemnew/show/P5339 坤坤题(n^3可能需要卡常数才能过)

见于神博客

我们考虑容斥,令\(f(k)\)表示至少有k组人讨论坤坤。

则答案为 \(ans=\sum\limits_{i=0}^{Min(n/4,a,b,c,d)} (-1)^i f(i)​\)

考虑怎么求\(f(i)\)

我们把一组连续讨论c,t,r,l称为一个cxk元素。

钦定\(i\)个cxk元素

还剩下\(A_1=a-i​\)个c,\(A_2=b-i​\)个t,\(A_3=c-i​\)个r,\(A_3=d-i​\)个l.

答案为\(放a,b,c,d方案数*\dbinom{n-4k+k}{k}​\)

左边即为\(\sum\limits_{0\le b_j\le A_j\\b_1+b_2+b_3+b_4=n-4i}\dbinom{n-4k}{b_1,b_2,b_3,b_4}​\)

复杂度\(O(n^5)​\)无法接受

考虑优化

  1. 背包

    \(dp[i][j]\)表示选择到第\(i\)类人,总共选了\(j\)个人的方案数,

    则显然有转移\(dp[i+1][j+k]=dp[i][j]*\dbinom{A_i}{k}\)

    \(dp[i][j]=\sum\limits_{k=0}^{A_i}\dbinom{A_i}{k}dp[i-1][j-k]\)

    总复杂度\(O((4*k^2)*k/4)=O(k^3)​\)可以接受

  2. 卷积,NTT 不会

  3. meet in the middle.

    枚举\(A,B\)用了\(k\)个,则\(C,D\)用了\(n-k\)个.

    再枚举\(A\)用了\(x_1\)个,则\(B\)用了\(k-x_1\)

    得到一组不等式
    \[ 0\le x_1\le A_1 \\0\le k-x_1\le A_2 \]
    解出一组\(l_1\le x_1\le r_1\)
    同理由\(C,D\)可得一组\(l_2\le x_2\le r_2\)
    大力求得左式
    \[ (\sum\limits_{l_1\le i\le r_1}\dbinom{k}{i})*(\sum\limits_{l_2\le i\le r_2}\dbinom{n-k}{i})*\dbinom{n}{k} \]
    发现前两项可以预处理前缀和求出.
    所以复杂度\(O(k^2)\)

转载于:https://www.cnblogs.com/pmt2018/p/11218984.html

你可能感兴趣的:(正睿OI游记(Day0x04)组合数学计数专题)