codeforces 148D Bag of mice(概率DP)

题目链接: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[n][m]>-1) return p[n][m];

    if(m==0||n==0) return 1;

    p[n][m]=1.0*n/(n+m);

    double x,y;

    if(m==1) p[n][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[n][m]+=1.0*m/(n+m)*(x+y);

    }

    return p[n][m];

}



double DFS1(int n,int m)

{

    if(f[n][m]>-1) return f[n][m];

    if(n==0) return 0;

    if(m==0) return 1;

    f[n][m]=1.0*n/(n+m)+1.0*m/(n+m)*(1-DFS2(n,m-1));

    return f[n][m];

}



int main()

{

    clr(f,-1); clr(p,-1);

    RD(n,m);

    PR(DFS1(n,m));

    return 0;

}

  

你可能感兴趣的:(codeforces)