推荐的书和网站
具体数学
组合数学 richard
oeis.org
Sample
1.用数字
0−9
0
−
9
每个恰好一次共能产生多少个排列
10!
10
!
,那如果首位不为0呢?
10!−9!
10
!
−
9
!
2.一个小tip若有理数 mn m n 是无限小数,则必然是无限循环小数
3.字母 a−f a − f 按顺序入栈,但随时可以出栈,形成的出栈序列有132种(卡特兰数)
4.将2*2的网格黑白染色,旋转不同构的染色方案有6种
组合数相关
加法原理
乘法原理
鸽笼原理(抽屉原理)
(图论上的应用)
Ramsey
R
a
m
s
e
y
定理
排列
n个元素的集合,写成一个序列的方式有
A(n)=n!
A
(
n
)
=
n
!
或
P(n)=n!
P
(
n
)
=
n
!
需要注意的是
如果是排成一个环
就是
n!n=(n−1)!
n
!
n
=
(
n
−
1
)
!
因为,对于原来的每一种排列,都能找到另外的
n−1
n
−
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−1 n − 1 种取值,所以就像上述的式子了
多重集的全排列
元素可以重复的集合的全排列
组合数
(nm) ( n m ) = n!m!(n−m)! n ! m ! ( n − m ) !
n个元素选m个的方案数
其中 (n0) ( n 0 ) =1
杨辉三角形可以用来算组合数
n个相同的球,放到m个不同的盒子里
1>每个盒子至少有一个球
隔板法
(n−1m−1)
(
n
−
1
m
−
1
)
2>盒子可以为空
(n+m−1m−1)
(
n
+
m
−
1
m
−
1
)
相当于n+m个球,分到m组
3>至少两个球
我们考虑先把每个盒子填一个球,那么就变成了
n−m
n
−
m
个球,然后放的时候要求每个盒子至少有一个球就可以
(n−m−1m−1)
(
n
−
m
−
1
m
−
1
)
bzoj2729
n个男生,m个女生,2名老师排成一行,老师和老师不能相邻,女生和女生不能相邻
老师可以相邻的数量 - 把两个老师捆绑起来的数量
二项式定理
组合数计算
1>
n,m≤103,p≤109
n
,
m
≤
10
3
,
p
≤
10
9
直接杨辉三角形
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≤109
n
,
m
≤
10
6
,
p
≤
10
9
如果p能直接分解乘质数的一次方相乘,可以用CRT,也可以直接将
n!
n
!
质因数分解
3>
n,m≤1018,p≤103
n
,
m
≤
10
18
,
p
≤
10
3
卢卡斯定理
4>
n,m≤109,p≤105
n
,
m
≤
10
9
,
p
≤
10
5
首先将p进行质因数分解,然后直接用CRT,或者,把p的质因子在A,B中去掉,然后求出A B去掉之后是多少,最后CRT合并
(p−1)! mod p =p−1
(
p
−
1
)
!
m
o
d
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个无区别的袋子中的方案数
3n 3 n 是指当成有区别的,除以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
=
(
2
n
n
)
n
+
1
=
(
2
n
n
)
−
(
2
n
n
−
1
)
Cn+1=∑ni=0CiCn−i C n + 1 = ∑ i = 0 n C i C n − i
例子:
有n个 +1 + 1 ,n个 −1 − 1 ,每个前缀和都 ≥ ≥ 0的方案数。
n个左括号,n个右括号的合法序列
n
n
个节点构成二叉树的数量
进栈次序是的出栈顺序
n+1边形的三角剖分数量