目录
- 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个非叶子节点的满⼆叉树的个数
不超过对角线的NE lattice path的个数
多项式系数
\[ (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
接下来将剩下\(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
(LLA)n个有标号的球分给m个有标号的盒子\(m^n\)
(ULA)n个无标号的球分给m个有标号的盒子
等同于方程的整数解个数 \(\dbinom{n+m-1}{m-1}\)(ULB)n个无标号的球划分给m个有标号的盒子 不能有空盒
等同于方程的整数解个数 \(\dbinom{n-1}{m-1}\)(LLC)n个有标号的球分给m个有标号的盒子 每个盒子至多放一个球
\(A_m^n\)
(ULC)n个无标号的球分给m个有标号的盒子 每个盒子至多放一个球\(A_m^n\)
(LUC)n个有标号的球分给m个无标号的盒子 每个盒子至多放一个球
\([n\le m]\)(UUC) n个⽆无标号的球分给m个无标号的盒子 每个盒⼦至多放一个球
\([n\le m]\)(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}\)(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
想象一下每一列表示一个盒子
这种状态表示\(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\)表示错排数(即每个数都不稳定的方案数)
考虑\(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})\)
考虑容斥。
\(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 数数+高精度
分两类情况讨论
两个老师中间只站着一个女生。这是两老师+一女生应该看做一个整体。
答案即为\(A(n,n)\cdot A(n+1,1)\cdot A(2,2) \cdot A(n+2,m−1)\)
两个老师中间不止站一个女生,这时中间一定有男生,于是随便插空就好了。
\(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)\)无法接受
考虑优化
背包
令\(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)\)可以接受
卷积,NTT
不会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)\)