zoukankan      html  css  js  c++  java
  • 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);
    }

      

  • 相关阅读:
    【Linux】Ubuntu 安装 openjdk8
    【算法】二分查找
    【算法】大规模排序
    【算法】小规模排序
    【算法】递归
    【数据结构】队列
    【Java】Windows 安装 JDK-13 并配置环境变量
    【数据库】关于 mysql 的执行顺序
    【数据结构】栈
    【数据结构】链表
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5578646.html
Copyright © 2011-2022 走看看