Examining the Rooms HDU - 3625(第一类斯特林数)

Posted yijiull

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Examining the Rooms HDU - 3625(第一类斯特林数)相关的知识,希望对你有一定的参考价值。

Examining the Rooms

 HDU - 3625 

题意:n个房间,每个房间里有一把钥匙(等概率),每进到一个房间可以得到钥匙去该钥匙对应的房间,如果当前没有钥匙则可以破门而入(1号房间不能破门而入),不过最多破门而入k次,问成功进入n个房间的总概率。

明显是求n个元素的i个环排列,i = 1,2,……,k.

不过要减去第一个房间自环的情况。

技术分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 const int mod = 1e9+7;
 5 const int maxn = 21;
 6 ll s1[maxn][maxn], f[maxn];
 7 void init(){
 8     for(int i = 1; i < maxn; i++) {
 9         s1[i][0] = 0;
10         s1[i][i] = 1;
11         for(int j = 1; j < i; j++) {
12             s1[i][j] = (s1[i-1][j-1] + (i-1)*s1[i-1][j]);
13         }
14     }
15     f[1] = 1;
16     for(int i = 2; i <= 20; i++) {
17         f[i] = f[i-1] * i;
18     }
19 }
20 int main(){
21     int n, k;
22     int t;
23     scanf("%d", &t);
24     init();
25     while(t--) {
26         scanf("%d %d", &n, &k);
27         double ans=0;
28         for(int i = 1; i <= k; i++) ans += (s1[n][i] - s1[n-1][i-1])*1.0 / f[n];
29         printf("%.4lf\n", ans);
30     }
31 }
View Code

 

以上是关于Examining the Rooms HDU - 3625(第一类斯特林数)的主要内容,如果未能解决你的问题,请参考以下文章

hdu 3625 Examining the Rooms —— 第一类斯特林数

HDU 3625 Examining the Rooms:第一类stirling数

Examining the Rooms HDU - 3625(第一类斯特林数)

HDU 3625 Examining the Rooms(第一类斯特林数)

Examining the Rooms - 第一类斯特灵数

Examining the database in SQL injection attacks