Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- double dp[1002][1002][2];
- double solve(int w, int b, bool pTurn)
- {
- if (b <= 0 && pTurn)
- return 1;
- if (w <= 0 || (b <= 0 && !pTurn))
- return 0;
- if (pTurn) {
- double lose = (double) b / (w + b);
- double win = 1 - lose;
- return dp[w][b][pTurn] = win + lose * solve(w, b - 1, false);
- }
- if(dp[w][b][pTurn] != -1)
- return dp[w][b][pTurn];
- else {
- double lose = (double) b / (w + b);
- double wEsc = (double) w / (w + b - 1);
- double bEsc = (double) (b - 1) / (w + b - 1);
- return dp[w][b][pTurn] = (double) lose * (wEsc * solve(w - 1, b - 1, true) + bEsc * solve(w, b - 2, true));
- }
- }
- int main()
- {
- double w, b;
- cin >> w >> b;
- memset(dp, -1, sizeof(dp));
- printf("%0.9f", solve(w, b, true));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement