概率dp——cf148D
求概率应该dp数组应该顺着求
这是由初始状态来决定递推方向的
/* 盒子里有两种颜色的球,一种是黑色另一种是白色 AB轮流去球,A先取 A每次随机摸一个球 B每次随机摸一个球,然后盒子里再丢一个球 先摸到白球者获胜,如果袋里没球了,那么B获胜 dp[i][j]:还剩i白,j黑色时A获胜的概率 三种情况 A摸了白球 A摸了黑球 龙摸了黑球 丢了黑球 丢了白球 */ #include<bits/stdc++.h> using namespace std; const double esp = 1e-7; const int maxn = 1050; int w,b; double dp[maxn][maxn]; int main(){ cin>>w>>b; for(int i=1;i<=w;i++)dp[i][0]=1; for(int i=1;i<=w;i++) for(int j=1;j<=b;j++){ dp[i][j]+=(double)i/(i+j); if(j>=3) dp[i][j]+=(double)j/(i+j) * (double)(j-1)/(i+j-1) * (double)(j-2)/(i+j-2) * dp[i][j-3]; if(j>=2) dp[i][j]+=(double)j/(i+j) * (double)(j-1)/(i+j-1) * (double)i/(i+j-2) * dp[i-1][j-2]; } printf("%.10lf\n",dp[w][b]); }