CDOJ 1135 邱老师看电影 概率dp

点击打开链接

概率dp


代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int maxn = 1e3+10;
 7 
 8 double dp[maxn][maxn];
 9 
10 double dfs(int w,int b){
11     if(dp[w][b] >= 0) return dp[w][b];
12     if(w == 0) return 0;
13     if(b==0 && w!=0) return 1;
14     dp[w][b] = w*1.0/(w+b);
15     if(b >= 2){
16         double tb = b*1.0/(w+b) * (b-1)*1.0/(w+b-1); //要想在下一次取胜则本次学妹应该拿走一个黑鼠 邱也必须拿走一个黑鼠 酱神可以任意拿走一个白鼠或一个黑鼠
17         if(b >= 3)
18             dp[w][b] += tb * dfs(w,b-3) * (b-2)*1.0/(w+b-2);//酱神拿走黒鼠  学妹和邱老师各拿走一只黑鼠
19         if(w >= 1)
20             dp[w][b] += tb * dfs(w-1,b-2) * w*1.0/(w+b-2); //酱神拿走白鼠  
21     }
22     return dp[w][b];
23 }
24 
25 int main(){
26     memset(dp,-1,sizeof(dp));
27     int w,b; cin >> w >> b;
28     printf("%.9f\n",dfs(w,b));
29 }

 

posted @ 2017-02-18 21:54  _yxg123  阅读(105)  评论(0编辑  收藏  举报