HDOJ 3625 第一类斯特林数

本文介绍了一个涉及概率计算的问题,即给定N个房间和每间房内随机放置的钥匙,求解在允许破门K次的情况下进入所有房间的概率。通过使用第一类斯特林数进行计算,给出了解决该问题的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:

http://acm.split.hdu.edu.cn/showproblem.php?pid=3625

题意:

有N个房间,每个房间里有一把钥匙,钥匙随机分配。如果手中有对应的钥匙,就可以开门,如果没有钥匙就只能选择破门而入拿钥匙,

第一个房间不允许破门,给定最多破门次数K,求能进入所有房间的概率。

题解:

第一类斯特林数

代码:

31 ll stir[25][25];
32 ll jie[25];
33 
34 void init() {
35     stir[1][0] = 0;
36     stir[1][1] = 1;
37     rep(i, 2, 21) rep(j, 1, i + 1)
38         stir[i][j] = stir[i - 1][j - 1] + (i - 1)*stir[i - 1][j];
39     jie[1] = 1;
40     rep(i, 2, 21) jie[i] = jie[i - 1] * i;
41 }
42 
43 int main() {
44     //ios::sync_with_stdio(false), cin.tie(0);
45     init();
46     int T;
47     cin >> T;
48     while (T--) {
49         int n, k;
50         cin >> n >> k;
51         ll ans = 0;
52         rep(i, 1, k + 1) ans += stir[n][i] - stir[n - 1][i - 1];
53         printf("%.4f\n", 1.0*ans / jie[n]);
54     }
55     return 0;
56 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值