h ( n ) = h ( 0 ) ∗ h ( n − 1 ) + h ( 1 ) ∗ h ( n − 2 ) + . . . + h ( n − 1 ) ∗ h ( 0 ) ( n > = 2 ) h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2) h(n)=h(0)∗h(n−1)+h(1)∗h(n−2)+...+h(n−1)∗h(0)(n>=2)
另类递推式:
h ( n ) = h ( n − 1 ) ∗ ( 4 ∗ n − 2 ) / ( n + 1 ) ; h(n)=h(n-1)*(4*n-2)/(n+1); h(n)=h(n−1)∗(4∗n−2)/(n+1);
递推关系的解为:
h ( n ) = C ( 2 n , n ) / ( n + 1 ) ( n = 0 , 1 , 2 , . . . ) h(n)=C(2n,n)/(n+1) (n=0,1,2,...) h(n)=C(2n,n)/(n+1)(n=0,1,2,...)
前几项:
1 , 1 , 2 , 5 , 14 , 42 , 132 , 429 1, 1, 2, 5, 14, 42, 132, 429 1,1,2,5,14,42,132,429
模 板 : H D U 1134 模板:HDU1134 模板:HDU1134
解决问题:给n个元素,求出k个环排列的方法数
首先是递推式,有:
S ( n , k ) = ( n − 1 ) ∗ S ( n − 1 , k ) + S ( n − 1 , k − 1 ) S(n,k)=(n-1)*S(n-1,k)+S(n-1,k-1) S(n,k)=(n−1)∗S(n−1,k)+S(n−1,k−1)
Stirling[n][k]
1
1 1
2 3 1
6 11 6 1
24 50 35 10 1
120 274 225 85 15 1
720 1764 1624 735 175 21 1
5040 13068 13132 6769 1960 322 28 1
40320 109584 118124 67284 22449 4536 546 36 1
362880 1026576 1172700 723680 269325 63273 9450 870 45 1
const int maxn = 21;
ll Stirling[maxn][maxn], fac[maxn] = {1};
void init() {
for(ll i = 1; i < maxn; i++)
fac[i] = fac[i - 1] * i;
Stirling[0][0] = 0;
Stirling[1][1] = 1;
for(ll i = 2; i < maxn; i++) {
for(ll j = 1; j <= i; j++) {
Stirling[i][j] = Stirling[i - 1][j - 1] + (i - 1) * Stirling[i - 1][j];
}
}
}
给 定 行 数 n , 求 第 m 行 的 第 二 类 斯 特 林 数 : 考 虑 分 治 F F T ( n l o g n 2 ) 和 倍 增 ( n l o g n ) 模 板 : 洛 谷 P 5408 , c o d e f o r c e s 960 G 给定行数n,求第m行的第二类斯特林数: 考虑分治FFT(nlogn^2)和倍增(nlogn)\\ 模板:洛谷P5408,codeforces960G 给定行数n,求第m行的第二类斯特林数:考虑分治FFT(nlogn2)和倍增(nlogn)模板:洛谷P5408,codeforces960G
解决问题:将n个不同元素拆分成m个集合的方案数
首先是递推式,有:
S ( n , k ) = S ( n − 1 , k − 1 ) + k ∗ S ( n − 1 , k ) S(n,k)=S(n-1,k-1)+k*S(n-1,k) S(n,k)=S(n−1,k−1)+k∗S(n−1,k)
Stirling[n][m]
1
1 1
1 3 1
1 7 6 1
1 15 25 10 1
1 31 90 65 15 1
1 63 301 350 140 21 1
1 127 966 1701 1050 266 28 1
1 255 3025 7770 6951 2646 462 36 1
1 511 9330 34105 42525 22827 5880 750 45 1
const int maxn = 21;
ll Stirling[maxn][maxn];
void init() {
Stirling[0][0] = 0;
Stirling[1][1] = 1;
for(ll i = 2; i < maxn; i++) {
for(ll j = 1; j <= i; j++) {
Stirling[i][j] = Stirling[i - 1][j - 1] + j * Stirling[i - 1][j];
}
}
}
给 定 行 数 n , 求 第 m 行 的 第 二 类 斯 特 林 数 : 构 造 多 项 式 A ( x ) = ∑ i = 0 m ( − 1 ) i i ! x i , B ( x ) = ∑ i = 0 m i n i ! x i , C ( x ) = A ( x ) ∗ B ( x ) , C 的 第 i 项 系 数 就 是 第 二 类 斯 特 林 数 S ( n , i ) , 也 就 是 第 n 行 第 i 列 的 那 个 数 模 板 : 洛 谷 P 5395 , c o d e f o r c e s 1342 E 给定行数n,求第m行的第二类斯特林数: \\构造多项式A(x)=\sum_{i=0}^m\frac{(-1)^i}{i!}x^i,B(x)=\sum_{i=0}^m\frac{i^n}{i!}x^i,C(x)=A(x)*B(x), \\C的第i项系数就是第二类斯特林数S(n,i),也就是第n行第i列的那个数\\ 模板:洛谷P5395,codeforces 1342E 给定行数n,求第m行的第二类斯特林数:构造多项式A(x)=i=0∑mi!(−1)ixi,B(x)=i=0∑mi!inxi,C(x)=A(x)∗B(x),C的第i项系数就是第二类斯特林数S(n,i),也就是第n行第i列的那个数模板:洛谷P5395,codeforces1342E
n个数可以划分成多少个集合
每个贝尔数都对应一行第二类斯特林数的和
1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975, 678570, 4213597, 27644437, 190899322, 1382958545, 10480142147, 82864869804, 682076806159, 5832742205057, 51724158235372, 474869816156751, 4506715738447323, 44152005855084346, 445958869294805289, 4638590332229999353, 49631246523618756274
Bell[n]
ll Bell[maxn];
void init() {
ll x[maxn];
Bell[0] = 1LL;
Bell[1] = 1LL;
x[0] = 1LL;
for(int i = 2; i < maxn; i++) {
x[i - 1] = Bell[i - 1];
for(int j = i - 2; j >= 0; j--)
x[j] = (x[j]%mod + x[j + 1]%mod)%mod;
Bell[i] = x[0]%mod;
}
}
模 板 : 2019 I C P C 网 络 赛 ( 忘 了 哪 个 站 哪 题 了 ) 模板:2019ICPC网络赛(忘了哪个站哪题了) 模板:2019ICPC网络赛(忘了哪个站哪题了)