• Codeforces Round #105 D. Bag of mice 概率dp


    http://codeforces.com/contest/148/problem/D

    题目意思是龙和公主轮流从袋子里抽老鼠。袋子里有白老师 W 仅仅。黑老师 D 仅仅。公主先抽,第一个抽出白老鼠的胜利,龙每次抽的时候会随机跑出一仅仅老鼠。给出W和D要你求出公主胜利的概率。

    对于dp[w][d]表示有w仅仅白老鼠d仅仅黑老鼠的情况下公主胜利的概率,假设公主第一次就抽出白鼠,概率是 w/(w+d) 。而假设公主没有抽到白鼠,要让公主胜利,龙也不能抽到白鼠。则是 rec = d/(w+d) * (d-1)/(w+d-1) 。

    这是跑出来的老鼠可能是白的也可能是黑的。

    假设是白鼠,则剩下w-1仅仅白鼠d-2仅仅黑鼠,然后再公主先手,概率是rec * w/(w+d-2) * dp[w-1][d-2]。 假设是黑鼠,则剩下w仅仅白鼠d-3仅仅黑鼠,相同公主先手。概率是rec * (d-2)/(w+d-2) * dp[w][d-3];

     

    终于得dp转移方程:

    dp[i][j] = i / (i+j) + rec * (i / (i+j-2) * dp[i-1][j-2] + (j-2) / (i + j - 2) * dp[i][j-3]);

    rec = j / (i + j)  * (j - 1) / (i + j - 1);


    /***********************************************
     ** problem ID    : cf_#105D.cpp
     ** create time    : Wed Jul 22 20:22:24 2015
     ** auther name    : xuelanghu
     ** auther blog    : blog.csdn.net/xuelanghu407
     **********************************************/
    
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int n, m;
    double dp[1010][1010];
    
    int main () {
        
        cin >> n >> m;
        
        for (int i=0; i<=n; i++) {
            dp[i][0] = 1.0;
        }
        for (int i=0; i<=m; i++) {
            dp[0][i] = 0.0;
        }
        
        for (int i=1; i<=n; i++) {
            dp[i][1] = (double)i / (i+1);
            for (int j=2; j<=m; j++) {
                dp[i][j] = (double)i / (i+j);
                double tmp = (double)j* (double)(j-1)  / (i+j) / (i+j-1);
                if (j>2) dp[i][j] += tmp * (double)(j-2) / (i+j-2) * dp[i][j-3];  
                dp[i][j] += tmp * (double)i / (i+j-2) * dp[i-1][j-2];
            }
        }
        
        printf("%.10lf
    ", dp[n][m]);
        
        return 0;
    }
    
    code


  • 相关阅读:
    郭大小
    最近翻译的三篇新闻
    又是一年教师节
    PowerDesigner 12.5 反向工程sql server
    Sql Server使用技巧
    一个纠结的silverlight问题
    PowerDesigner 15 使用技巧
    windows2008 + iis7 下载特殊后缀名文件设置方法
    无法读取配置节system.serviceModel因为它缺少节声明的解决方法
    PowerDesigner 15对ACCESS进行反向工程
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/8341176.html
Copyright © 2020-2023  润新知