您的位置:首页 > 其它

codeforces 148D Bag of mice(概率DP)

2013-05-04 00:42 387 查看
题目链接:http://codeforces.com/problemset/problem/148/D

题意:n个白球m个黑球在一个袋子中。A、B两个人玩游戏。

(1)先拿到白球的人赢,游戏结束;

(2)A先拿;

(3)每次B拿完后,会有一个球自己跳出来,这个球是随机的。

(4)拿到最后谁也没有拿到白球但是球没有了算B赢。

问A赢的概率。

思路:f[i][j]表示A面临(i,j)赢的期望,p[i][j]表示B面临(i,j)的期望。

double f[1005][1005],p[1005][1005];
int n,m;

double DFS1(int,int);

double DFS2(int n,int m)
{
if(p
[m]>-1) return p
[m];
if(m==0||n==0) return 1;
p
[m]=1.0*n/(n+m);
double x,y;
if(m==1) p
[m]+=1.0*m/(n+m)*(1-DFS1(n-1,m-1));
else
{
x=1.0*n/(n+m-1)*(1-DFS1(n-1,m-1));
y=1.0*(m-1)/(n+m-1)*(1-DFS1(n,m-2));
p
[m]+=1.0*m/(n+m)*(x+y);
}
return p
[m];
}

double DFS1(int n,int m)
{
if(f
[m]>-1) return f
[m];
if(n==0) return 0;
if(m==0) return 1;
f
[m]=1.0*n/(n+m)+1.0*m/(n+m)*(1-DFS2(n,m-1));
return f
[m];
}

int main()
{
clr(f,-1); clr(p,-1);
RD(n,m);
PR(DFS1(n,m));
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: