• 148D


    概率dp+记忆化搜索

    dp[i][j][0]表示当前公主走公主赢的概率,dp[i][j][1]表示当前龙走公主赢的概率,然后剩下的就是一些细节的讨论,记忆化搜索很方便

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1005;
    int n, m;
    double dp[N][N][2];
    double dfs(int n, int m, int f)
    {
        if(f == 1 && n + m <= 2) return 0.0;
        if(n == 0) return 0.0;
        if(m == 0) return f ? 0.0 : 1.0;
        if(dp[n][m][f] >= 0.0) return dp[n][m][f];
        dp[n][m][f] = 0.0;
        if(f == 0) dp[n][m][f] = (double)n / (double)(n + m) + dfs(n, m - 1, f ^ 1) * (double)m / (double)(n + m);
        else 
        {
            double t = (double)n / (double)(n + m);
            if(m >= 2) dp[n][m][f] = (1.0 - t) * ((double)(m - 1) / (double)(n + m - 1) * dfs(n, m - 2, f ^ 1) + (double)n / (double)(n + m - 1) * dfs(n - 1, m - 1, f ^ 1));
            else dp[n][m][f] = (1.0 - t) * dfs(n - 1, m - 1, f ^ 1);
        }
        return dp[n][m][f];
    }
    int main()
    {
        scanf("%d%d", &n, &m);
        for(int i = 0; i <= n; ++i)
            for(int j = 0; j <= m; ++j) dp[i][j][0] = dp[i][j][1] = -1.0; 
        printf("%.10f
    ", dfs(n, m, 0));
        return 0;
    }
    View Code
  • 相关阅读:
    Sass
    小程序_统计字符
    小程序_乘法表
    abbreviation(缩写)
    Linux命令整理
    生出树状的文件夹结构
    Excel的使用技巧
    小程序_数字从小到大输出
    Delphi 之Inherited详解
    学习结构[记录]类型(4)
  • 原文地址:https://www.cnblogs.com/19992147orz/p/7719651.html
Copyright © 2020-2023  润新知