hdu Examining the Rooms

这道题的知识点第一次听说 ,就是应用斯特林数。题目的意思是给你房间数N,和最多能破门的个数,让你求能全部把房间打开的概率!

a[i][j]=a[i-1][j-1]+(i-1)*a[i-1][j];

 1 #include <cstdio>

 2 #include <cstring>

 3 #include <cmath>

 4 #include <algorithm>

 5 using namespace std;

 6 

 7 long long f[30],a[30][30];

 8 

 9 void inti()

10 {

11     f[1]=1;

12     f[0]=1;

13     for(int i=2; i<=20; i++)

14     {

15         f[i]=f[i-1]*i;

16     }

17     for(int i=1; i<=20; i++)

18     {

19         a[i][0]=0;

20     }

21     for(int i=1; i<=20; i++)

22     {

23         for(int j=1; j<=i; j++)

24         {

25             if(i==j) a[i][j]=1;

26             else

27                 a[i][j]=a[i-1][j-1]+(i-1)*a[i-1][j];

28         }

29     }

30     for(int i=1; i<=20; i++)

31     {

32         for(int j=1; j<=20; j++)

33         {

34             a[i][j]=abs(a[i][j]);

35         }

36     }

37 }

38 

39 int main()

40 {

41     int t,n,k;

42     scanf("%d",&t);

43     inti();

44     while(t--)

45     {

46         scanf("%d%d",&n,&k);

47         long long sum=0;

48         for(int i=1; i<=k; i++)

49         {

50             sum+=(a[n][i]-a[n-1][i-1]);

51         }

52         printf("%.4lf\n",sum*1.0/f[n]);

53     }

54     return 0;

55 }
View Code

 

 

你可能感兴趣的:(oom)