#include<cstdio>
#include<cstring>
const int LMT=1012;
double dp[LMT][LMT],_no[LMT][LMT];
void init(void)
{
memset(dp,0,sizeof(dp));
}
int main(void)
{
int s,n,i,j;
while(~scanf("%d%d",&n,&s))
{
init();
for(i=0;i<=n;i++)
for(j=0;j<=s;j++)
_no[i][j]=i*j*1.0/(n*s);
for(i=n;i>=0;i--)
for(j=s;j>=0;j--)
{
if(i==n&&j==s)continue;
if(i<n)
dp[i][j]+=dp[i+1][j]*(n-i)*j/(n*s);
if(i<n&&j<s)
dp[i][j]+=dp[i+1][j+1]*(n-i)*(s-j)/(n*s);
if(j<s)
dp[i][j]+=dp[i][j+1]*i*(s-j)/(n*s);
dp[i][j]=(dp[i][j]+1)/(1-_no[i][j]);
}
printf("%.4lf\n",dp[0][0]);
}
return 0;
}
POJ 2096 Collecting Bugs 概率DP
最新推荐文章于 2021-07-02 21:36:40 发布