题意:给你n扇门,然后可以开k次门,每次们后都有一把钥匙,不能开1号门,问最后打开一号门的概率是多少
思路:看大家说是裸的第一类斯特林数,我觉得有篇博客写的很好(传送门),这里采取的是博客里的第二种思路,感觉这种如果想到的话更容易理解,但是并没有遇到博客里说的g++会wa的情况
代码:
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int maxn=55; LL s1[maxn][maxn]; double f[55]; void init() { s1[0][0]=1; for(int i=1;i<maxn;i++){ for(int j=1;j<=i;++j){ s1[i][j]=s1[i-1][j-1]+s1[i-1][j]*(i-1); } } } int main() { init(); f[0]=1; for(int i=1;i<maxn;i++){ f[i]=f[i-1]*i; } int T_T; scanf("%d",&T_T); while(T_T--){ int n,k; scanf("%d%d",&n,&k); double ans=0; for(int i=1;i<=k;i++){ ans+=s1[n][i]-s1[n-1][i-1]; } ans/=f[n]; printf("%.4f\n",ans); } return 0; }
原文地址:https://www.cnblogs.com/lalalatianlalu/p/9688007.html
时间: 2024-11-05 06:25:12