• 求概率 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;
    }
    

      

  • 相关阅读:
    使用SSH搭建简易的网上购物系统
    myeclipse8.0中安装maven插件m2eclipse
    Ant入门
    hibernate中多对多分解成一对多,
    在eclipse上,安装myeclipse插件
    hibernate复合主键的映射
    struts2中struts:iterator标签的使用
    hibernate复合主键同时做外键
    Mahout问题总括
    面向对象基础概念
  • 原文地址:https://www.cnblogs.com/Twsc/p/6739605.html
Copyright © 2020-2023  润新知