dp[i][j]表示人面对这个状态获胜的概率(这里不是先手),用全概率公式搞
#include<iostream>
#include<algorithm>
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
int dir[4][2]={0,1,0,-1,1,0,-1,0};
const double eps=1e-8;
double dp[1005][1005];
double dfs(int w,int b)
{
if(dp[w][b]!=-1.0)return dp[w][b];
if(w==0)return dp[w][b]=0;
if(b==0)return dp[w][b]=1;
if(w+b==2)return dp[w][b]=0.5;
double x,y,h;
x=(double)w;
y=(double)b;
h=(double)(w+b);
dp[w][b]=w/h;
if(w>=2&&b>=2)
dp[w][b]+=dfs(w-1,b-2)*(y/h)*((y-1)/(h-1))*((x)/(h-2));
if(b>=3)
dp[w][b]+=dfs(w,b-3)*(y/h)*((y-1)/(h-1))*((y-2)/(h-2));
return dp[w][b];
}
int main()
{
int w,b;
while(scanf("%d%d",&w,&b)!=EOF)
{
int i,j;
double ans;
for(i=0;i<=w;i++)
for(j=0;j<=b;j++)
dp[i][j]=-1.0;
ans=dfs(w,b);
printf("%.9lf\n",ans);
}
return 0;
}