斐波那契数列
其实不是特殊计数数列,但是可能出现在题目里.
定义:(f_0=0,f_1=1,f_n=f_{n-1}+f_{n-2}(ngeq 2)),生成函数:(F(x)=frac{x}{1-x-x^2}).
通项公式:
[f_n=frac{1}{sqrt 5}left(frac{sqrt 5 +1}{2}
ight)^n-frac{1}{sqrt 5}left(frac{sqrt 5-1}{2}
ight)^n
]
一些性质:
(1.) (f_n^2-f_{n-1}f_{n+1}=(-1)^{n-1}).
(2.) (sum_{i=1}^{n}f_{2i-1}=f_{2n}).
(3.) (sum_{i=1}^{n}f_{2i}=f_{2n+1}-1).
(4.) (sum_{i=1}^n f_i^2=f_{n}f_{n+1}).
(5.) (frac{f_{2n}}{f_n}=f_{n-1}+f_{n+1}).
(6.) (sum_{i=1}^n f_i=f_{i+2}-1).
(7.) (m|nRightarrow f_m|f_n).
(8.) (f_{gcd(n,m)}=gcd(f_n,f_m))
求第(n)项通常可以用矩阵乘法:
[egin{bmatrix}
f_{n-1}& f_{n}
end{bmatrix}
imes
egin{bmatrix}
0 & 1
\ 1 & 1
end{bmatrix}
=egin{bmatrix}
f_{n}& f_{n+1}
end{bmatrix}
]
错位排列
(d_n)表示(n)个数字错位排列的方案数,则:
[n!=sum_{i=0}^ninom{n}{i}d_i
]
二项式反演,得到通项公式:
[d_n=sum_{i=0}^n(-1)^iinom{n}{i}(n-i)!=n!sum_{i=0}^nfrac{(-1)^i}{i!}
]
两个递推公式:
[d_n=(n-1)(d_{n-1}+d_{n-2})
]
证明:
考虑分类讨论,第(n)个数字放进去,如果前面所有数字都是错排,那么只需把(n)和前面任意一个数字交换即可. 如果前面存在一个数字不是错排,那么必须和他交换.
化简一下上面的式子,可以得到:
[d_n=n imes d_{n-1}+(-1)^n
]
卡特兰数列
[c_i=egin{cases}1,&i=0\ sum_{j=0}^{i-1}c_jc_{i-j-1},&igeq1end{cases}
]
生成函数
[C(x)=frac{1pmsqrt{1-4x}}{2x}
]
通项公式
[c_n=frac{inom{2n}{n}}{n+1}=inom{2n}{n}-inom{2n}{n-1}
]
递推式
[c_n=frac{4n-2}{n+1}c_{n-1}
]
常见模型:
(1.) 一个足够大的栈的进栈序列为(1,2,cdots,n)时有(c_n)个不同的出栈序列.
(2.) (n+1)个叶子的满二叉树的数量为(c_n)(每个节点有(0/2)个儿子).
(3.) 在(n imes n)的方格地图中,从一个角到另一个角,不跨越对角线的路径数为(c_n).
(4.) 圆周上有(2n)个点,以这些点为端点连(n)条互不相交的弦,不同的连法总数为(c_n).
(5.) 凸(n-2)边形用其(n-1)条对角线分割为互不重叠的三角形的分法总数为(c_n).
(6.) (n)对括号合法的括号序列的方案数为(c_n).
格路径计数的结论:
从((0,0))到((n,m))不越过直线(y=x)的格路径条数为(c_n).
从((0,0))到((n,m)(ngeq m))不越过直线(y=x)的格路径条数为(inom{n+m}{m}-inom{n+m}{m-1}).
斯特林数列
第一类斯特林数:(egin{bmatrix}n\mend{bmatrix})表示把(n)个有标号的球分成(m)个无标号的非空轮换的方案数.
递推式:
[egin{bmatrix}n\mend{bmatrix}=egin{bmatrix}n-1\m-1end{bmatrix}+(n-1)egin{bmatrix}n-1\mend{bmatrix}
]
特殊的值:
[egin{bmatrix}n\0end{bmatrix}=egin{cases}1, & n= 0\ 0, & n >0end{cases} , egin{bmatrix}n\1end{bmatrix}=(n-1)!
]
第二类斯特林数:(egin{Bmatrix}n\mend{Bmatrix})表示把(n)个有标号的球分成(m)个无标号的非空集合的方案数.
递推式:
[egin{Bmatrix}n\mend{Bmatrix}=egin{Bmatrix}n-1\m-1end{Bmatrix}+megin{Bmatrix}n-1\mend{Bmatrix}
]
特殊的值:
[egin{Bmatrix}n\0end{Bmatrix}=egin{cases}1, & n= 0\ 0, & n >0end{cases} , egin{Bmatrix}n\2end{Bmatrix}=2^{n-1}-1
]
第二类斯特林数可以用容斥写出一个通项公式:
[egin{Bmatrix}n\mend{Bmatrix}=frac{1}{m!}sum_{i=0}^m(-1)^iinom{m}{i}(m-i)^n
]
更重要的是,我们要认识到计数是双向的:
[m^n=sum_{i=0}^minom{m}{i}egin{Bmatrix}n\iend{Bmatrix}i!
]
把(n)个球随便放到(m)个盒子里(可以空)的方案数,就相当于枚举有多少个盒子非空,用第二类斯特林数计数,再乘上盒子标号的方案数之和.
[n!=sum_{i=0}^negin{bmatrix} n\ i end{bmatrix}
]
(n)个元素排列的方案数,其实也等于枚举置换环个数的方案数之和,也就是第一类斯特林数.
斯特林数和阶乘幂都有很强的联系:
[m^n=sum_{i=0}^minom{m}{i}egin{Bmatrix}n\iend{Bmatrix}i!=sum_{i=0}^megin{Bmatrix}n\iend{Bmatrix}m^{underline{i}}
]
我们一般会把求和上界换成(n)(当(n>m)的时候显然没什么问题,因为这时候二项式系数是(0),当(n<m)的时候只要枚举到(n)即可,因为斯特林数是(0)):
[m^n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}m^{underline{i}}
]
应用阶乘幂翻转(m^{overline{n}}=(-1)^n(-m)^{underline{n}}),可以令上式中的(m=-m),则:
[(-m)^n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}(-m)^{underline{i}}
\ m^n(-1)^n=sum_{i=0}^n(-1)^iegin{Bmatrix}n\iend{Bmatrix}m^{overline{i}}
\ m^n=sum_{i=0}^n(-1)^{n-i}egin{Bmatrix}n\iend{Bmatrix}m^{overline{i}}
]
第一类斯特林数和上升幂也有很强的关系:
[m^{overline n}=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}m^i
]
同样也可以阶乘幂翻转一下,得到:
[(-m)^{overline n}=sum_{i=0}^n(-1)^i egin{bmatrix}n\ iend{bmatrix}m^i
\ (-1)^nm^{underline n}=sum_{i=0}^n(-1)^i egin{bmatrix}n\ iend{bmatrix}m^i
\ m^{underline n}=sum_{i=0}^n(-1)^{n-i} egin{bmatrix}n\ iend{bmatrix}m^i
]
首先要记住两个基本公式:下降幂通过第二类斯特林数求和得到普通幂,普通幂通过第一类斯特林数求和得到上升幂. 然后剩下的再通过阶乘幂翻转推导即可.
根据斯特林数和阶乘幂之间的关系,我们还可以推导出一个翻转公式:
[m^n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}m^{underline{i}}=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}sum_{j=0}^i(-1)^{i-j}egin{bmatrix}i\ jend{bmatrix} m^j
\ m^n=sum_{i=0}^nsum_{j=0}^i egin{Bmatrix}n\ iend{Bmatrix}egin{bmatrix}i\jend{bmatrix}(-1)^{i-j}m^j
\ =sum_{i=0}^nsum_{j=i}^n egin{Bmatrix}n\ jend{Bmatrix}egin{bmatrix}j\ iend{bmatrix}(-1)^{j-i}m^i
]
对应项系数相等,就有如下的公式成立:
[sum_{j=i}^n egin{Bmatrix}n\ jend{Bmatrix}egin{bmatrix}j\ iend{bmatrix}(-1)^{j-i}=[i=n]
]
同理可以这样操作一下:
[m^{overline n}=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}m^i=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}sum_{j=0}^i(-1)^{i-j}egin{Bmatrix}i\ jend{Bmatrix}m^{overline{j}}
\m^{overline n}=sum_{i=0}^nsum_{j=0}^iegin{bmatrix}n\iend{bmatrix}egin{Bmatrix}i\ jend{Bmatrix} (-1)^{i-j}m^{overline j}
\ =sum_{i=0}^nsum_{j=i}^n egin{bmatrix}n\jend{bmatrix}egin{Bmatrix}j\iend{Bmatrix}(-1)^{j-i}m^{overline j}
]
对应项系数相等,就有如下的公式成立:
[sum_{j=i}^n egin{bmatrix}n\ jend{bmatrix}egin{Bmatrix}j\ iend{Bmatrix}(-1)^{j-i}=[i=n]
]
这两个公式就叫翻转公式,那么接下来就有两个显而易见的反演成立:
[f(n)=sum_{i=0}^negin{Bmatrix}n\ iend{Bmatrix}g(i)Longleftrightarrow g(n)=sum_{i=0}^n(-1)^{n-i}egin{bmatrix}n\ iend{bmatrix} f(i)
\ f(n)=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}g(i)Longleftrightarrow g(n)=sum_{i=0}^n(-1)^{n-i}egin{Bmatrix}n\ iend{Bmatrix} f(i)
]
Bell数列
定义:(w_n)表示把(1sim n)的自然数放到若干个无序集合中的方案数.
递推式:
[w_n=[n=1]+sum_{i=1}^ninom{n-1}{i-1}w_{n-i}
=sum_{i=0}^n egin{Bmatrix}n\ iend{Bmatrix}
]
生成函数:
[hat W(x)=exp (e^{x}-1)
]
Prufer序列
(mathrm{Prufer})序列将一棵(n)个点的无根树和一个长度为(n-2)的正整数序列建立起一一对应关系.
根据树构造序列:每次选取标号最小的叶子,删去并将其父亲的编号加入序列.
根据序列构造树:取序列首元素(x),最下标号不在序列中的点(y),连接((x,y)),删去(x,y). 当序列外的点集只剩两个数字时连接它们.
推论:
(1.) 度数为(d_i)的节点在序列中出现(d_i-1)次.
(2.) (mathrm{K}_n)的生成树个数为(n^{n-2})个.
(3.) 给定度数序列(d_{1sim n}),无根树的方案数为(inom{n-2}{d_1-1,d_2-1,cdots,d_n-1}).
(4.) 图联通方案数
我们可以使用(mathrm{Prufer})序列来求解. 不妨把(k)个连通块缩成一个点,那么问题就转化为构造一棵树. 不妨设这棵树上每个点的度数为(d_i),那么(mathrm{Prufer})序列的方案数显然就是一个多项式系数:
[inom{k-2}{d_1-1,d_2-1,cdots,d_k-1}=frac{(k-2)!}{prod_{i=1}^k(d_i-1)!}
]
显然连接连通块(i)的边有(s_i)中选择,那么联通整棵树的方案数就是:
[inom{k-2}{d_1-1,d_2-1,cdots,d_k-1}prod_{i=1}^ks_i^{d_i}
]
现在我们枚举度数序列(d)的所有情况,那么图联通方案数就是:
[sum_{sum_{i=1}^kd_i=2k-1,forall d_igeq 1}inom{k-2}{d_1-1,d_2-1,cdots,d_k-1}prod_{i=1}^ks_i^{d_i}
]
然后换元,设(d_i-1=t_i),那么上式等于:
[sum_{sum_{i=1}^kt_i=k-2,forall t_igeq 0}inom{k-2}{t_1,t_2,cdots,t_k}prod_{i=1}^ks_i^{t_i+1}
]
这时候考虑多项式定理:
[sum_{sum_{i=1}^ka_i=p}inom{p}{a_1,a_2,cdots,a_k}prod_{i=1}^kx_i^{a_i}=left(sum_{i=1}^kx_i
ight)^p
]
于是答案就显而易见了:
[sum_{sum_{i=1}^kt_i=k-2,forall t_igeq 0}inom{k-2}{t_1,t_2,cdots,t_k}prod_{i=1}^ks_i^{t_i+1}=left(sum_{i=1}^{k}s_i
ight)^{k-2}prod_{i=1}^k s_i=n^{k-2}prod s_i
]