设dp[n][m]表示n只白鼠,m只黒鼠时princess获胜的概率
直接按照题意求解即可‘
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
double dp[1005][1005];
double DP(int n,int m)
{
if(dp[n][m]>1e-6)
return dp[n][m];
if(n==0)
return 0;
if(m<=0)
return 1;
dp[n][m] += n*1.0/(n+m);
if(m>=2)
dp[n][m] += m*1.0/(n+m) * (m-1)*1.0/(m-1+n)*((m-2)*1.0/(m-2+n)*DP(n,m-3)+(n*1.0/(m-2+n))*DP(n-1,m-2));
return dp[n][m];
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
double ans = DP(n,m);
printf("%.9lf\n",ans);
}
return 0;
}