zoukankan      html  css  js  c++  java
  • CodeForces 148D Bag of mice

    题目链接:CodeForces 148D Bag of mice

    题目大意:

    题解:
    (dp[i][j])表示轮到王妃抓时有(i)只白鼠,(j)只黑鼠的情况下,王妃获胜的概率。
    王妃获胜的情况可以分为以下三种:

    1. 王妃抓到一只白鼠,则王妃赢了,概率为(frac{i}{i+j})
    2. 王妃抓到一只黑鼠,龙抓到一只黑鼠,跑出来一只黑鼠,则转移到(dp[i][j-3]),概率为(frac{j}{i+j} imes frac{j-1}{i+j-1} imes frac{j-2}{i+j-2})
    3. 王妃抓到一只黑鼠,龙抓到一只黑鼠,跑出来一只白鼠,则转移到(dp[i-1][j-2]),概率为(frac{j}{i+j} imes frac{j-1}{i+j-1} imes frac{i}{i+j-2})
      状态转移方程为:

    [dp[i][j] = frac{i}{i+j} + frac{j}{i+j} imes frac{j-1}{i+j-1} imes (frac{j-2}{i+j-2} imes dp[i][j-3] + frac{i}{i+j-2} imes dp[i-1][j-2]) ]

    #include <iomanip>
    #include <iostream>
    using namespace std;
    
    double dp[1010][1010];
    int n, m;
    
    int main() {
        cin >> n >> m;
        for (int i = 1; i <= n; ++i) {
            dp[i][0] = 1;
        }
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                dp[i][j] = (double)i / (i + j);
                if (j >= 3) {
                    dp[i][j] += 1.0 * j / (i + j) * ((j - 1.0) / (i + j - 1.0)) * ((j - 2.0) / (i + j - 2.0)) * dp[i][j - 3];
                }
                if (j >= 2) {
                    dp[i][j] += 1.0 * j / (i + j) * ((j - 1.0) / (i + j - 1.0)) * (i / (i + j - 2.0)) * dp[i - 1][j - 2];
                }
            }
        }
        cout << fixed << setprecision(9) << dp[n][m];
        return 0;
    }
    
  • 相关阅读:
    poj1580
    poj1607
    poj1313
    poj1314
    c语言之extern和static
    C笔记(一)
    搭建Linux高可用性集群(第一天)
    利用回调函数实现泛型算法
    关于SQL server中的 identity
    SQL(一)
  • 原文地址:https://www.cnblogs.com/IzumiSagiri/p/15062965.html
Copyright © 2011-2022 走看看