推荐的书和网站
具体数学
组合数学 richard
oeis.org
Sample
1.用数字0−90−9每个恰好一次共能产生多少个排列
10!10!,那如果首位不为0呢?10!−9!10!−9!
2.一个小tip若有理数mnmn是无限小数,则必然是无限循环小数
3.字母a−fa−f按顺序入栈,但随时可以出栈,形成的出栈序列有132种(卡特兰数)
4.将2*2的网格黑白染色,旋转不同构的染色方案有6种
组合数相关
加法原理
乘法原理
鸽笼原理(抽屉原理)
(图论上的应用) RamseyRamsey定理
排列
n个元素的集合,写成一个序列的方式有A(n)=n!A(n)=n!或P(n)=n!P(n)=n!
需要注意的是
如果是排成一个环
就是n!n=(n−1)!n!n=(n−1)!
因为,对于原来的每一种排列,都能找到另外的n−1n−1个排列,与它在排成环的情况下相等
错排
f[i]=(n−1)∗(f[i−1]+f[i−2]f[i]=(n−1)∗(f[i−1]+f[i−2]
我们考虑第n个人如果放在第i个人的位置上,如果i放在n的位置上,那么剩下的情况就是f[n−2]f[n−2],如果i不在n的位置上,又相当于求了一个f[n−1]f[n−1],因为i有n−1n−1种取值,所以就像上述的式子了
多重集的全排列
元素可以重复的集合的全排列
组合数
(nm)(nm) =n!m!(n−m)!n!m!(n−m)!
n个元素选m个的方案数
其中(n0)(n0)=1
杨辉三角形可以用来算组合数
n个相同的球,放到m个不同的盒子里
1>每个盒子至少有一个球
隔板法
(n−1m−1)(n−1m−1)
2>盒子可以为空
(n+m−1m−1)(n+m−1m−1) 相当于n+m个球,分到m组
3>至少两个球
我们考虑先把每个盒子填一个球,那么就变成了n−mn−m个球,然后放的时候要求每个盒子至少有一个球就可以
(n−m−1m−1)(n−m−1m−1)
bzoj2729
n个男生,m个女生,2名老师排成一行,老师和老师不能相邻,女生和女生不能相邻
老师可以相邻的数量 - 把两个老师捆绑起来的数量
二项式定理
组合数计算
1>n,m≤103,p≤109n,m≤103,p≤109
直接杨辉三角形
C[n][m]=C[n−1][m−1]+C[n−1][m]C[n][m]=C[n−1][m−1]+C[n−1][m]
2>n,m≤106,p≤109n,m≤106,p≤109
如果p能直接分解乘质数的一次方相乘,可以用CRT,也可以直接将n!n!质因数分解
3>n,m≤1018,p≤103n,m≤1018,p≤103
卢卡斯定理
4>n,m≤109,p≤105n,m≤109,p≤105
首先将p进行质因数分解,然后直接用CRT,或者,把p的质因子在A,B中去掉,然后求出A B去掉之后是多少,最后CRT合并
(p−1)! mod p =p−1(p−1)! mod p =p−1
这里介绍一种方法:求n!质因数分解后p^几次方
n/p+n/p∗p+n/p∗p∗p⋯n/p+n/p∗p+n/p∗p∗p⋯
tyvj 1298分苹果
n个有区别的苹果,分到3个无区别的袋子中的方案数
3n3n是指当成有区别的,除以6是因为实际上是无区别,-3是因为当只有一个袋子有苹果的时候,他的情况是3倍而不是6倍,不能直接处,所以先减掉,然后后来再加回来
斯特林数
二类:
n个不同的小球,放到k个相同的盒子,每个盒子至少放一个球的种数
f[n][k]=k∗f[n−1][k]+f[n−1][k−1]f[n][k]=k∗f[n−1][k]+f[n−1][k−1]
那如果k个盒子不同呢?
k!∗f[n][k]k!∗f[n][k]即可
可以理解为k个盒子的编号有k!k!种
一类
将n个不同元素排成k个非空环排列的方法数:
g[n][k]=(n−1)∗g[n−1][k]+g[n−1][k−1]g[n][k]=(n−1)∗g[n−1][k]+g[n−1][k−1]
Catalan数
1 1 2 5 14 42 132
C)n=(2nn)n+1=(2nn)−(2nn−1)C)n=(2nn)n+1=(2nn)−(2nn−1)
Cn+1=∑ni=0CiCn−iCn+1=∑i=0nCiCn−i
例子:
有n个+1+1,n个−1−1,每个前缀和都≥≥0的方案数。
n个左括号,n个右括号的合法序列
nn个节点构成二叉树的数量
进栈次序是的出栈顺序
n+1边形的三角剖分数量