Codeforces 148D:Bag of mice 概率DP

Bag of mice

题目链接:

http://www.codeforces.com/problemset/problem/148/D

题意:

公主和龙在玩抓老鼠的游戏,在一个包里有一些白色老鼠和一些黑色老鼠,抓到每只老鼠的几率都是相同的,谁先抓到白色老鼠谁就赢,公主先开始抓,老鼠被抓走了就没了,不会回来,当龙抓的时候,除了被抓的老鼠,剩下的老鼠中还会逃走一只,求公主赢的概率。

题解:

一道水题,做法应该有很多......我的做法是设dp[i][j]为第i次抓老鼠,抓完老鼠后逃走了j只白色老鼠的概率

             

代码

#include<stdio.h>
#include<string.h>
double dp[1400][1001],res=0.0,sum,sumb;
int main()
{
  int w,b,t;
  scanf("%d%d",&w,&b);
  t=(w+b)/3*2;//公主和龙最多共可以抓t次老鼠
  if((w+b)%3>=1)t++;
  if((w+b)%3==2)t++;
  memset(dp,0,sizeof(dp));
  dp[0][0]=1.0;
  for(int i=1;i<=t;++i)//第i次抓
  for(int j=0;j<w&&j<=i/2;++j)//抓完跑了j只老鼠
  {
    sum=1.0*(w+b-(int)(1.5*(i-1)));//抓之前的老鼠数
    if(i%2)dp[i][j]=dp[i-1][j]*(sum-w+j)/sum,res+=dp[i-1][j]*(w-j)/sum;//公主抓的时候
    else//龙抓的时候
    {
      dp[i][j]=dp[i-1][j]*(sum-w+j)/sum*(sum-w+j-1)/(sum-1);
      if(j)dp[i][j]+=dp[i-1][j-1]*((sum-w+j-1)/sum*(w-j+1)/(sum-1));
    }
  }
  printf("%.9f ",res);
}

  

原文地址:https://www.cnblogs.com/kiuhghcsc/p/5578646.html