概率dp,第一次接触概率dp,。。。其实学了dp之后应该有了这种思想的。。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=105,MAXM=2005;
double dp[MAXM][MAXN];
int main()
{
int T,n,m;
scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&m);
if(m==0){
printf("%.6lf\n",0.0);
continue;
}
for(int i=0;i<MAXM;i++){
for(int j=0;j<MAXN;j++)
dp[i][j]=0.0;
}
dp[1][1]=1;
for(int i=2;i<=m;i++){
for(int j=1;j<=n;j++)
dp[i][j]=(i>=j?(dp[i-1][j]*j/n+dp[i-1][j-1]*(n-j+1)/n):0.0);
}
printf("%.6lf\n",dp[m][n]);
}
return 0;
}