zoukankan      html  css  js  c++  java
  • Codeforces Round #105 (Div. 2) D. Bag of mice 概率DP

    链接:

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

    题意:

    给出w只白老鼠,b只黑老鼠,公主和龙轮流取老鼠,公主先手,龙取老鼠时会吓跑一只老鼠,先取出白老鼠的人赢,如果没人取到白老鼠,那么龙赢。问公主赢的概率。

    题解:

    设有i只白鼠j只黑鼠的状态下公主获胜的概率是dp[i][j],这种状态可由一下三种状态得到:

    公主第一次就取得一只白鼠获胜,概率为i / (i + j);

    公主没有取到白鼠,取黑鼠的概率是j / (i + j),若公主要赢,下次龙一定取黑鼠,概率为(j - 1) / (i + j - 1),同时跑掉的是黑鼠,概率为(j - 2) / (i + j - 2),状态转移到dp[i][j - 3];

    公主没有取到白鼠,取黑鼠的概率是j / (i + j),若公主要赢,下次龙一定取黑鼠,概率为(j - 1) / (i + j - 1),同时跑掉的是白鼠,概率为i / (i + j - 2),状态转移到dp[i - 1][j - 2];

    代码:

    31 double dp[MAXN][MAXN];
    32 
    33 int main() {
    34     int w, b;
    35     cin >> w >> b;
    36     rep(i, 1, w + 1) dp[i][0] = 1;
    37     rep(i, 1, w + 1) rep(j, 1, b + 1) {
    38         dp[i][j] = 1.0*i / (i + j);
    39         if (j >= 2)
    40             dp[i][j] += 1.0*j / (i + j)*(j - 1) / (i + j - 1)*i / (i + j - 2)*dp[i - 1][j - 2];
    41         if (j >= 3)
    42             dp[i][j] += 1.0*j / (i + j)*(j - 1) / (i + j - 1)*(j - 2) / (i + j - 2)*dp[i][j - 3];
    43     }
    44     printf("%.9f
    ", dp[w][b]);
    45     return 0;
    46 }
  • 相关阅读:
    盲山有感
    一个用Regex的完成sql语句中字段替换的demo
    月夜奔跑
    乱弹
    《勇敢抉择》摘录一
    梦想高歌
    从今天起
    php性能优化
    unity3d shader中RenderType的所有类型
    Unity打包ipa图文教程
  • 原文地址:https://www.cnblogs.com/baocong/p/7346950.html
Copyright © 2011-2022 走看看