Codeforces 148D(简单,概率DP)

2015-04-22 01:54:59

思路:

  概率dp水题... 被 vj 翻译过来的中文坑惨了... (竟然是错的QAQ)

  dp[i][j]表示尚有 i 个白,j 个黑的胜率,递推方程很水。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cmath>
 5 #include <vector>
 6 #include <map>
 7 #include <set>
 8 #include <stack>
 9 #include <queue>
10 #include <string>
11 #include <iostream>
12 #include <algorithm>
13 using namespace std;
14 
15 #define MEM(a,b) memset(a,b,sizeof(a))
16 #define REP(i,n) for(int i=0;i<(n);++i)
17 #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
18 #define getmid(l,r) ((l) + ((r) - (l)) / 2)
19 #define MP(a,b) make_pair(a,b)
20 
21 typedef long long ll;
22 typedef pair<int,int> pii;
23 const int INF = (1 << 30) - 1;
24 const int MAXN = 1010;
25 
26 int w,b;
27 double dp[MAXN][MAXN];
28 
29 int main(){
30     scanf("%d%d",&w,&b);
31     for(int i = 1; i <= w; ++i)
32         dp[i][0] = 1.0;
33     for(int i = 1; i <= w; ++i){
34         for(int j = 0; j <= b; ++j){
35             dp[i][j] = 1.0*i/(i+j);
36             if(i&&j>1) dp[i][j] += dp[i-1][j-2]*i*j*(j-1)/(i+j)/(i+j-1)/(i+j-2);
37             if(j>2) dp[i][j] += dp[i][j-3]*j*(j-1)*(j-2)/(i+j)/(i+j-1)/(i+j-2);
38         }
39     }
40     printf("%.12f\n",dp[w][b]);
41     return 0;
42 }

 

posted @ 2015-04-22 01:56  Naturain  阅读(168)  评论(0编辑  收藏  举报