南外集训Day5
前言
前两天写了一些,结果好像不知道怎么没了。空的东西,还有两个人点赞,我真是无语了。
上课的是一个巨良心的老师(祝好人一生平安),由于我是菜鸡的 $xxs$ 所以对组合数学以至整块数学的运用程度不如同机房的人,所以这个老师很多时候在回答我的问题,然而同机房的大佬一听就会,而且他们说 $4$ 页 $PPT$ 被我拖了一节课(或许是急着想吃饭怕没菜?众所周知,某些中学的学生冲向食堂的速度人均快于苏炳添。下课铃一响,就会从四面八方涌出无数面目狰狞的学生冲向食堂),然后都想来把我的嘴贴上胶布……
我想也许我下次进这个集训的会议就臭名昭著了……
……
我太菜了!
组合数学
组合数
-
排列
$A_n^m$ 表示排列(在很少的地方可能会见到 $P$ 表示)。
$$A_n^m={{n!} \over {(n-m)!}}$$
$$A_n^m={nA_{n-1}^{m-1}}$$
$$A_n^m={mA_{n-1}^{m-1}+A_{n-1}^m}$$
-
错排问题
错排问题解决方案:
-
$f(n)=(n−1)∗(f(n−2)+f(n−1))$
-
容斥
首先有 $n!$ 种排列,减去单个放正确的情况,每个有 $(n-1)!$ 种,但是所有 $2$ 个被放重复的情况多减了,所以再加回来,以此类推。
-
-
-
组合
$C_n^m$ 或者 $\big( ^n_m \big)$ 表示组合数。
$$C_n^m={{n!} \over {m!(n-m)!}}$$
$$C_n^m={C_{n-1}^{m}}+{{C_{n-1}^{m-1}}}$$
常见模型
-
$n$ 个数的排列为 $n!$ 。
-
从 $(0,0)$ 走到 $(n,m)$,每次只能向上或向右,有 $C_{n+m}^n$ 中方法。
-
$n$ 个元素的圆排列方案数是 $(n-1)!$ 。
圆排列指把 $n$ 个元素排成一个圆,两种方案一样当且仅当一种方案旋转能得到另外一种。
-
$n$ 个相同的球分到 $m$ 个不同的盒子里,每个盒子不为空的方案是 $C_{n-1}^{m-1}$ 种。
隔板法典型。
-
$n$ 个相同的球分到 $m$ 个不同的盒子里,每个盒子可以为空的方案是 $C_{n+m-1}^{m-1}$ 种。
考虑这种情况就是多加 $m$ 个球,每个盒子不为空的方案数。
-
$n$ 个有编号的正整数求和小于等于 $m$ 的方案数是 $C_m^n$ 。
考虑选取的 $n$ 个点是每个正整数区间的结尾(正整数的区间即每个数值都有和数值对应长度的区间)。
也可以认为选取的第 $1$ 个点是前 $1$ 个点前缀和的值在数轴上的位置,选取的第 $2$ 个点是前 $2$ 个点前缀和的值在数轴上的位置。
斯特林数
-
第一类斯特林数
$n$ 个不同的元素组成 $m$ 个圆排列的方案数
$S(n,m)=(n-1)*S(n-1,m)+S(n-1,m-1)$ 。
第一种情况,在已有的一个数后面插入。
第二种情况,新建一个圆。
-
第二类斯特林数
$n$ 个不同的球放到 $m$ 个相同且不能为空的盒子里的方案数。
$S(n,m)=S(n-1,m-1)+m*S(n-1,m)$ 。
$S(n,m)=\frac{1}{m!}\sum_{k=0}^{m}(-1)^kC_m^k(m-k)^n$ 。
这个东西是个容斥,先算出盒子两辆不同的方案数 $\sum_{k=0}^{m}(-1)^kC_m^k(m-k)^n$ ,再除去全排列。枚举的 $k$ 为最少 $k$ 个集合不放置的方案数。
例题
-
求 $0 \leq a_1 \leq a_2 \leq ... \leq a_{n-1} \leq a_n \leq m$ 的方案数。
差分,我们把每个数值看作球, $a_i-a_{i-1}$ 看作盒子(两边的边界各算一个),那么有 $m$ 个球, $n+1$ 个盒子,那么方案数就是 $C_{m+n}^{n}$ 。
-
排队问题:有 $n$ 个人、 $m$ 支有编号的队伍,每个人都要在一个队伍里,且队伍里的人有先后顺序,求方案数。
首先人肯定是不同的,同样,根据常识,空的不叫队伍。那么我们考虑把人全排列,然后利用隔板法。
方案数是 $C_{n-1}^{m-1}$ 。
-
双数组计数:求两个长度 $m$ 的数组,值域 $[1,n]$ 中整数,且所有 $a_i \leq b_i$ , $a$ 不降 $b$ 不升。
模型转换成 $0 \leq a_1 \leq a_2 \leq ... \leq a_n \leq b_n \leq... \leq b_1 \leq m$ 。这样非常简单,就是前面一个第一个例题,只是值从 $1$ 开始,所以答案是 $C_{n-1+2*m}^{n-1}$ 。
-
棋盘问题: $n*n$ 的棋盘,要求放 $n$ 个棋子,一个格子会被某个棋子攻击当且仅当处于同行或同列且他们之间没有别的棋子,求所有空格都被攻击,且掐好有 $k$ 对棋子会互相攻击的方案数。
首先,所有空格都被攻击,那么需要每行或者每列刚好放一个。发现行列有对称性,所以答案最后乘以 $2$ 即可。所以我们先以每行放了一个考虑 其次,我们注意到假设当前这一列放了 $t$ 个棋子,产生的互相攻击数为 $t-1$ 次,那么有:刚好有 $n-k$ 列放有棋子,因为每一列会消耗掉一个互相攻击数,本来总数为 $n$ ,减去了 $n-k$ 个 $1$ ,即 $k$ 对相互攻击,答案为 $C_n^{n-k}*S(n,n-k)*(n-k)!$ 。
-
$GCD$ 计数:给定 $n,m$ 和序列 $b_1,b_2,...,b_n$ , 问有多少种序列 $(a_1,a_2,...,a_n)$ 满足 $1 \le a_i \le m$ 且 $gcd(a_1,a_2,,...,a_n)=b_i$ 。
首先 $b_{i-1}$ 必须是 $b_i$ 的倍数才有解,再设 $g = \frac{b_{i-1}}{b_i}$ ,那么问题变为 $1$ 到 $\lfloor \frac{m}{b_i} \rfloor$ 中与 $g$ 互质的个数。利用容斥解决。