zoukankan      html  css  js  c++  java
  • 求概率 Bag of mice CodeForces

    题意:袋子里有w只白鼠和b只黑鼠。龙和公主轮流从袋子里抓老鼠。谁先抓到白色老师谁就赢。公主每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来。每次抓老鼠和跑出来的老鼠都是随机的。如果两个人都没有抓到白色老鼠则龙赢。公主先抓。问公主赢的概率。

    dp[i][j]表示有i只白鼠和j只黑鼠公主赢的概率。(可以由三种情况组成)

    1.公主抓了白鼠。dp[i][j]=i/i+j;

    公主抓了黑鼠,龙也抓了黑鼠 (j>=2):

    2.跳出去的是白鼠  dp[i][j]+=j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)*dp[i-1][j-2];

    3.当j>3时,跳出去的是黑鼠  dp[i][j]+=j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3];

    注意处理好边界情况.

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    double dp[1005][1005];
    int main()
    {
        int w,b;
        while(scanf("%d%d",&w,&b)!=EOF)
        {   
            memset(dp,0,sizeof(dp));
        for(int i=0;i<=b;i++)
            dp[0][i]=0.0;
        for(int i=0;i<=w;i++)
            dp[i][0]=1.0;
            dp[0][0]=0;
        for(int i=1;i<=w;i++)
            for(int j=1;j<=b;j++)
        {
           dp[i][j]+=(double)i/(i+j);
           if(j>=2) dp[i][j]+=(double)j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)*dp[i-1][j-2];
           if(j>=3) dp[i][j]+=(double)j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3];
        }
            
        }
     
        printf("%.9f
    ",dp[w][b]);
        return 0;
    }
    

      

  • 相关阅读:
    python数字
    Python数据类型
    Python表达式与运算符
    正则表达式
    计划任务
    nfs服务
    nginx反向代理+负载均衡
    samba安装测试
    自定义centos7 yum仓库
    token过期时间
  • 原文地址:https://www.cnblogs.com/Twsc/p/6739605.html
Copyright © 2011-2022 走看看