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);
    }

      

  • 相关阅读:
    Promise笔记
    srping-cloud-stream集成rocketmq
    mysql锁
    profiling分析
    mysql慢查询
    sql语句中in与exists的使用区别
    数据库死锁的解决办法
    死锁的形成以及处理
    百万数据修改索引,百万数据修改主键
    创建视图索引
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5578646.html
Copyright © 2011-2022 走看看