斯特林数笔记
# 第二类斯特林数
把个不同的球放到个相同的盒子里,假设没有空盒,则放球方案数记做或,称为第二类 Stirling 数。
显然
# 递推形式
考虑最后一个球,如果把它单独放一个盒子,则有种方案,如果把它同前面的某一个球放到同一个盒子,有种方案
# 其他公式
,其中为组合数
容斥原理可得上式,由于盒子相同,最后要除以
左边就是k个球可以任意放置在n个盒子里。 右边就是枚举非空盒子的数量i,那么把k个球放在i个盒子(盒子不同,需要乘上一个i!)里面再乘上选出i个非空盒子的方案数。
# 第一类斯特林数
是把个不同的球排成个非空循环排列的方法数
设多项式,展开式型如
不考虑各项系数符号,的系数的绝对值记作为,称为第一类斯特林数。
# 递推形式
考虑最后一个球,若它单独放一个圈,有种放法;若是放在前面的某一个球的左边,则有种放法。
# 例题 HDU 3625
有 n 个房间,编号为 1 到 n,每个房间对应有一把钥匙。现在把这 n 把钥匙随机地放在这 n 个房间中,并把门锁上。现在要将这 n 个房间的门都打开,你有 k 次把门炸开的机会,不过 1 号房间的门过于坚固炸不开。问能够成功打开所有门的概率。
也就是说,1号房间的钥匙不能在1号房内,且个房间组成的环数不大于
当个房间组成个环,有合法方案数,为个数组成个环的方案数,为组成了个环(即号房自己成环)的方案数。
答案为
AC代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll stirling[30][30], fac[30];
void solve(){
ll n, k;
cin >> n >> k;
double ans = 0;
for(int i=1; i<=k; i++){
ans = ans + (1.0 * (stirling[n][i] - stirling[n-1][i-1]) / fac[n]);
}
cout << fixed << setprecision(4) << ans << endl;
}
void init(){
stirling[0][0] = fac[0] = 1;
for(int i=1; i<=20; i++){
fac[i] = fac[i-1] * i;
for(int j=1; j<=i; j++){
stirling[i][j] = (i-1) * stirling[i-1][j] + stirling[i-1][j-1];
}
}
}
signed main(){
init();
int t; cin >> t;
while(t--) solve();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 例题 HDU 4372
不知道为什么用逆元求组合数会WA。
BTW,垃圾HDU,OOM报的是WA。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
const int maxn = 2020;
ll stirling[maxn][maxn], comb[maxn][maxn];
void solve(){
ll n, f, b;
cin >> n >> f >> b;
ll ans = comb[f+b-2][f-1] * stirling[n-1][f+b-2] % mod;
cout << ans << '\n';
}
void init(){
stirling[0][0] = comb[0][0] = 1;
for(int i=1; i<maxn; i++){
comb[i][0] = 1;
for(int j=1; j<=i; j++){
comb[i][j] = (comb[i-1][j] + comb[i-1][j-1]) % mod;
stirling[i][j] = ((i-1) * stirling[i-1][j] % mod + stirling[i-1][j-1]) % mod;
}
}
}
signed main(){
init();
int t; cin >> t;
while(t--) solve();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
上次更新: 2021/02/24, 03:37:30