#include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <iostream> #include <iomanip> #include <cmath> #include <map> #include <set> #include <queue> using namespace std; #define ls(rt) rt*2 #define rs(rt) rt*2+1 #define ll long long #define ull unsigned long long #define rep(i,s,e) for(int i=s;i<e;i++) #define repe(i,s,e) for(int i=s;i<=e;i++) #define CL(a,b) memset(a,b,sizeof(a)) #define IN(s) freopen(s,"r",stdin) #define OUT(s) freopen(s,"w",stdout) const ll ll_INF = ((ull)(-1))>>1; const double EPS = 1e-8; const int INF = 100000000; const int MAXN = 1000+100; double dp[MAXN][MAXN]; int main() { int w,b; while(~scanf("%d%d",&w,&b)) { CL(dp,0); for(int i=1;i<=w;i++)dp[i][0]=1.0; for(int i=1;i<=b;i++)dp[0][i]=0.0; for(int i=1;i<=w;i++) for(int j=1;j<=b;j++) { dp[i][j]=1.0*i/(i+j); if(j>=3)dp[i][j]+=1.0*j*(j-1)*(j-2)/(1.0*(i+j)*(i+j-1)*(i+j-2))*dp[i][j-3]; if(i>=1 && j>=2)dp[i][j]+=1.0*i*j*(j-1)/(1.0*(i+j)*(i+j-1)*(i+j-2))*dp[i-1][j-2]; } printf("%.9lf\n",dp[w][b]); } return 0; }
原文:http://blog.csdn.net/u011026968/article/details/38769143