Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. double dp[1002][1002][2];
  4. double solve(int w, int b, bool pTurn)
  5. {
  6.     if (b <= 0 && pTurn)
  7.         return 1;
  8.     if (w <= 0 || (b <= 0 && !pTurn))
  9.         return 0;
  10.     if (pTurn) {
  11.         double lose = (double)  b / (w + b);
  12.         double win = 1 - lose;
  13.         return dp[w][b][pTurn] = win + lose * solve(w, b - 1, false);
  14.     }
  15.     if(dp[w][b][pTurn] != -1)
  16.         return dp[w][b][pTurn];
  17.     else {
  18.         double lose = (double) b / (w + b);
  19.         double wEsc = (double) w / (w + b - 1);
  20.         double bEsc = (double) (b - 1) / (w + b - 1);
  21.         return dp[w][b][pTurn] =  (double) lose * (wEsc * solve(w - 1, b - 1, true) + bEsc * solve(w, b - 2, true));
  22.     }
  23. }
  24.  
  25. int main()
  26. {
  27.     double w, b;
  28.     cin >> w >> b;
  29.     memset(dp, -1, sizeof(dp));
  30.     printf("%0.9f", solve(w, b, true));
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement