版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DT_Kang/article/details/80657799
Ramsey定理 环排列:
( n − 1 ) !
(
n
−
1
)
!
错排:
f [ i ] = f [ i − 1 ] ∗ ( i − 1 ) + f [ i − 2 ] ∗ ( i − 1 )
f
[
i
]
=
f
[
i
−
1
]
∗
(
i
−
1
)
+
f
[
i
−
2
]
∗
(
i
−
1
)
1
n
n
个男生,
m
m
个女生,
2
2
名老师,每两人不相同,他们站成一行,求女生不相邻并且老师不相邻的方案数。
先把老师当做男生,用隔板法把女生插进男生(和老师)里,然后减去两个老师挨在一起的情况,也就是把两个老师看成一个人,再做一遍插板法。
2
求
( n m ) m o d p
(
n
m
)
m
o
d
p
,
n , m <= 10 9 , p <= 10 5
n
,
m
<=
10
9
,
p
<=
10
5
。
首先,把
p
p
分解质因数。分别计算模每个
p a i i
p
i
a
i
,然后CRT合并。 考虑其中一个
p a
p
a
,设它为
m o d
m
o
d
。如果我们分别把分子分母的
p
p
的次数计算出来,指数相减,就可以避免对
p
p
的除法了。
设
A = n ! , A ′ = A / p b
A
=
n
!
,
A
′
=
A
/
p
b
,
A ′
A
′
中不含
p
p
。我们同样需要知道
A
A
的值。考虑
1 , 2 , … , n
1
,
2
,
…
,
n
,模
m o d
m
o
d
的余数有长度为
p
p
的循环节。如果余数不等于零,那么肯定不会被模掉,所以把他们乘起来算一下快速幂。对于余数等于零的数,都有至少一个
p
p
,我们把每个数都除以
p
p
,再进行这样的操作。分母同理,然后对于没有
p
p
的数就可以求逆元了。
第二类斯特林数
S ( n , k ) = k ⋅ S ( n − 1 , k ) + S ( n − 1 , k − 1 )
S
(
n
,
k
)
=
k
·
S
(
n
−
1
,
k
)
+
S
(
n
−
1
,
k
−
1
)
球和盒子都可区分:
k ! ⋅ S ( n , k )
k
!
·
S
(
n
,
k
)
第一类斯特林数
n
n
个不同元素构成
k
k
个非空换排列。
S ( n , k ) = S ( n − 1 , k − 1 ) + ( n − 1 ) ⋅ S ( n − 1 , k )
S
(
n
,
k
)
=
S
(
n
−
1
,
k
−
1
)
+
(
n
−
1
)
·
S
(
n
−
1
,
k
)
卡特兰数
1 , 1 , 2 , 5 , 14 , 42 , 132 , …
1
,
1
,
2
,
5
,
14
,
42
,
132
,
…
C n = ( 2 n n ) n + 1 = ( 2 n n ) − ( 2 n n − 1 ) = ∑ i = 0 n − 1 C i C n − i − 1
C
n
=
(
2
n
n
)
n
+
1
=
(
2
n
n
)
−
(
2
n
n
−
1
)
=
∑
i
=
0
n
−
1
C
i
C
n
−
i
−
1
栗子:
n
n
个节点的二叉树数量。
整数划分问题
广义牛顿二项式定理。
扫描二维码关注公众号,回复:
3518605 查看本文章
生成函数
普通型生成函数:
f ( x ) = ∑ i = 0 + ∞ a i x i
f
(
x
)
=
∑
i
=
0
+
∞
a
i
x
i
常用生成函数:
1 , 1 , 1 , … , → 1 1 − x 1 , 0 , 0 , … , 1 , 0 , 0 , … , 1 , 0 , 0 , ⋯ → 1 1 − x m 1 , 2 , 3 , … , → 1 ( 1 − x ) 2 1 , 2 , 4 , 8 , … , → 1 1 − 2 x C 0 n , C 1 n , C 2 n , … , → ( 1 + x ) n
1
,
1
,
1
,
…
,
→
1
1
−
x
1
,
0
,
0
,
…
,
1
,
0
,
0
,
…
,
1
,
0
,
0
,
⋯
→
1
1
−
x
m
1
,
2
,
3
,
…
,
→
1
(
1
−
x
)
2
1
,
2
,
4
,
8
,
…
,
→
1
1
−
2
x
C
n
0
,
C
n
1
,
C
n
2
,
…
,
→
(
1
+
x
)
n
指数型生成函数:
f ( x ) = ∑ i = 0 + ∞ 1 i ! a i x i
f
(
x
)
=
∑
i
=
0
+
∞
1
i
!
a
i
x
i
那么序列
1 , 1 , 1 , …
1
,
1
,
1
,
…
的生成函数是
e x
e
x
。对应地,
e k x
e
k
x
对应的序列是
k 1 , k 2 , k 3 , …
k
1
,
k
2
,
k
3
,
…
设生成函数
h ( x ) = g ( x ) ∗ f ( x )
h
(
x
)
=
g
(
x
)
∗
f
(
x
)
,那么
h ( x )
h
(
x
)
的第
n
n
项系数为:
1 n ! c n = ∑ i = 0 n 1 i ⋅ 1 ( n − i ) ! a i b n − i = n ! ⋅ 1 n ! ∑ i = 0 n 1 i ⋅ 1 ( n − i ) ! a i b n − i = 1 n ! ∑ i = 0 n ( n i ) a i b n − i
1
n
!
c
n
=
∑
i
=
0
n
1
i
·
1
(
n
−
i
)
!
a
i
b
n
−
i
=
n
!
·
1
n
!
∑
i
=
0
n
1
i
·
1
(
n
−
i
)
!
a
i
b
n
−
i
=
1
n
!
∑
i
=
0
n
(
n
i
)
a
i
b
n
−
i
如果说
a i
a
i
是
i
i
个数的排列数,
b i
b
i
同理,那么
c i
c
i
就是他们总共的排列数。
3
求
n
n
位数中有多少个数各位数都是奇数,并且
1 , 3
1
,
3
都出现并且都出现了偶数次。
首先,序列
1 , 0 , 1 , 0 , …
1
,
0
,
1
,
0
,
…
的生成函数是
e x + e − x 2
e
x
+
e
−
x
2
。 不论取多少个
5
5
,
5
5
的排列数都是一,因此取
5
5
对应的生成函数是
e x
e
x
。 由于只能选偶数个一,并且不能不选,因此
1
1
对应的生成函数是
e x + e − x 2 − 1
e
x
+
e
−
x
2
−
1
。 同样,我们可以写出
3 , 7 , 9
3
,
7
,
9
的生成函数,把他们乘起来得到:
e 3 x ( e x + e − x 2 − 1 ) 2
e
3
x
(
e
x
+
e
−
x
2
−
1
)
2
把这个式子展开,取出第
n
n
项系数就是答案。
范德蒙行列式
4
[CTSC2010]性能优化 观察到转移矩阵是一个循环矩阵 。 循环矩阵乘循环矩阵也是循环矩阵。 由于我们只存一行就可以表示一个循环矩阵,因此我们可以用
O ( n 2 )
O
(
n
2
)
的时间完成矩阵乘法。用 fft 可以优化为
O ( n log n )
O
(
n
log
n
)
。