码迷,mamicode.com
首页 > 其他好文 > 详细

CF148D--Bag of mice+概率期望dp

时间:2015-01-26 13:43:48      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:dp   uva   

第一道概率期望dp:)

其实和一般的dp也差不多,只要状态选好就行了。


定义dp[i][j]表示还剩i只白老鼠j只黑老鼠时候公主赢得概率。

则:1.公主选白老鼠,直接赢,概率:i/(i+j)

        2.公主选黑老鼠

             1)龙选黑老鼠,逃走黑老鼠;概率:j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)

             2)  龙选黑老鼠,逃走白老鼠;概率:j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)

             3) 龙选白老鼠,这样公主是必输的,不用考虑

然后dp[i][j]等于以上概率之和。

初始化时,如果只要白老鼠则获胜概率为1

如果只要黑老鼠则获胜概率为0



代码如下:


#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

double dp[1100][1100];

int main()
{
    int w,b;
    while(scanf("%d%d",&w,&b)!=EOF)
    {
        for(int i=1;i<=w;i++)
           dp[i][0]=1;
        for(int j=1;j<=b;j++)
           dp[0][j]=0;
        for(int i=1;i<=w;i++)
          for(int j=1;j<=b;j++)
          {
              dp[i][j]=1.0*i/(i+j);
              if(j>=3)
                 dp[i][j]+=j*1.0/(i+j)*(j-1)*1.0/(i+j-1)*(j-2)*1.0/(i+j-2)*dp[i][j-3];
              if(j>=2)
                 dp[i][j]+=j*1.0/(i+j)*(j-1)*1.0/(i+j-1)*i*1.0/(i+j-2)*dp[i-1][j-2];
          }
        printf("%.9lf\n",dp[w][b]);
    }
  return 0;
}



CF148D--Bag of mice+概率期望dp

标签:dp   uva   

原文地址:http://blog.csdn.net/acm_lkl/article/details/43150845

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!