codeforces 148D Bag of mice DP 概率

题意:类似取球游戏,可以认为龙有两次取求机会,第二次取任何球都无效。

做法:建立状态nv[i][j],剩下i个球,j个是白球,同理dra,龙的状态,然后进行模拟即可。

#include <iostream>
#include <cstdio>
#define LMT 2004//老错误了,LMT错误,RE了一次
using namespace std;
double nv[LMT][LMT],dra[LMT][LMT];
int main()
{
    double ans=0;
    int n,w,b,i=1;
    scanf("%d%d",&w,&b);
    n=w+b;
   nv[n][w]=dra[n][w]=1;
    for(int i=n;i>0;)
    {
        if(i>0)i--;
        else break;
        for(int j=0;j<=w;j++)
        {
            ans+=dra[i+1][j+1]*(j+1)*1.0/(i+1);//公主胜利
            nv[i][j]=dra[i+1][j]*(i+1-j)*1.0/(i+1);//没胜利,继续比,下面的龙总不胜利。
        }
        if(i>0)i--;
        else break;
        for(int j=0;j<=w;j++)dra[i][j]=nv[i+1][j]*(i+1-j)*1.0/(i+1);
        if(i>0)i--;
        else break;
        for(int j=0;j<=w;j++)
            dra[i][j]=dra[i+1][j]*(i+1-j)*1.0/(i+1)+dra[i+1][j+1]*(j+1)*1.0/(i+1);
    }
    printf("%.9lf\n",ans);
    return 0;
}


你可能感兴趣的:(codeforces 148D Bag of mice DP 概率)