• codeforces#148D. Bag of mice(概率dp)


    题意:在一个袋子里面有a只白老鼠和b只黑老鼠,先拿到白老鼠的胜利,公主先手,皇子后手,并且皇子拿出一只老鼠后,袋子里面会蹦出一只老鼠

    拿每只老鼠的概率相等,蹦出的老鼠也是等概率蹦出的,当公主先手时,求公主获胜的概率

    分析:刚开始看题目感觉很复杂,想了很久,突然蹦出一个想法,dp或许可以做,然后就发现原来这题这么简单。这就是传说中的概率dp

    首先定义dp[x][y]为有x只白老鼠和y只黑老鼠,公主胜利的概率。那么,

    dp[x][y]  公主第一次拿到白鼠的概率 公主拿到黑鼠*皇子拿到黑鼠*蹦出黑鼠*dp[x][y-3] 公主拿到黑鼠*皇子拿到黑鼠*蹦出白鼠*dp[x-1][y-2]

    代码:

    #include<bits/stdc++.h>
    #define ll long long
    #define  pa pair<int,int>
    using namespace std;
    const int maxn=1e3+10;
    double dp[maxn][maxn];
    double co(int x,int y)
    {
        if(x<0||y<0)return 0;
        if(x==1&&y==0)return 1;
        if(x==0&&y==1)return 0;
        if(x==0&&y==0)return 0;
        if(x==1&&y==1)return 0.5;
        if(x==2&&y==0)return 1;
        if(x==0&&y==2)return 0;
        if(fabs(dp[x][y])>0.00000001)return dp[x][y];
        return dp[x][y]=1.0*x/(x+y)+1.0*y/(x+y)*(y-1)/(x+y-1)*(co(x-1,y-2)*x/(x+y-2)+co(x,y-3)*(y-2)/(x+y-2));
    }
    int main()
    {
        int a,b;
        cin>>a>>b;
        printf("%.9f",co(a,b));
        return 0;
    }
    

      

  • 相关阅读:
    Generic data structures in C
    ioremap
    Writing LRU Cache in C
    智能logo免费体验|如何让餐饮logo在点评网站上一眼出众?
    web应用主动从服务器推送数据到客户端的方式
    Vue router 导航守位
    css 清除浮动
    html 布局 左右两边是200px 的宽度,中间自适应
    手机端和PC端浏览器兼容
    js 原型链
  • 原文地址:https://www.cnblogs.com/carcar/p/10334369.html
Copyright © 2020-2023  润新知