hdu3625 ( 第一类斯特灵数 )

在钥匙与房间的所有情况中,我们知道当手中没有未开启的房间门的钥匙时我们需要破坏一扇门。在已开启的门中,钥匙作为指示的方向,是房间号码形成了一个环。而针对每种情况,形成的环数就是所要破坏的门的数量。所以要找寻k以内的环数的情况,并且因为1号门不能破坏,所以要减去,以1号门为单独的一个环且符合情况的数量。

 1 #include<stdio.h>
 2 #include<string.h>
 3 typedef long long i64;
 4 int main()
 5 {
 6     i64 s[25][25],f[25];
 7     int T,n,k,i,j;
 8     memset(s,0,sizeof(s));
 9     s[1][1]=1;
10     for(i=1;i<=20;i++)
11     for(j=1;j<=i+1;j++)
12     s[i+1][j]=s[i][j-1]+i*s[i][j];
13     f[1]=1;f[0]=1;
14     for(i=2;i<=20;i++)
15     f[i]=f[i-1]*i;
16     scanf("%d",&T);
17     {
18         while(T--)
19         {
20             scanf("%d%d",&n,&k);
21             i64 p1=0;
22             for(i=1;i<=k;i++)
23             p1+=(s[n][i]-s[n-1][i-1]);
24             printf("%.4lf\n",(double)p1/f[n]);
25         }
26     }
27     return 0;
28 }

 

posted on 2013-07-19 17:32  Ac_国士无双  阅读(191)  评论(0编辑  收藏  举报