HDU 3625 Examining the Rooms

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625

题意:给出N个房间,每个房间的钥匙随机放在某个房间内,概率相同。有K次炸门的机会(不能炸第一个房间),求能进入所有房间的可能性为多大。

思路:N个房间形成[1,K]个环时可以。N个元素形成K个环为S[N][K]=S[N-1][K-1]+S[N-1][K]*(N-1)。题目要求不能炸第一个房间,要减去第一个房间独立成环的情况,答案为sigama(S[n][i]-S[n-1][i-1])(1<=i<=K)。

 

i64 f[N],S[N][N];



void init()

{

    int i,j;

    f[0]=1;

    for(i=1;i<N;i++) f[i]=f[i-1]*i;

    for(i=1;i<N;i++)

    {

        S[i][0]=0; S[i][i]=1;

        for(j=1;j<i;j++) S[i][j]=(i-1)*S[i-1][j]+S[i-1][j-1];

    }

}



int n,m;



int main()

{

    init();

    rush()

    {

        RD(n,m);

        if(n==1||m==0)

        {

            puts("0.0000");

            continue;

        }

        double ans=0;

        int i;

        FOR1(i,m) ans+=S[n][i]-S[n-1][i-1];

        ans/=f[n];

        printf("%.4lf\n",ans);

    }

}

  

 

你可能感兴趣的:(oom)