zoukankan      html  css  js  c++  java
  • ZOJ

    ZOJ-3640 Help Me Escape 概率DP

    题意

    有一个人要逃离一个洞穴,现提供 (n) 条出路,每条出路有危险值 (c_i) ,这个人的武力值为(f)

    每天这个人会随机一条路,若 (f) > (c_i) ,那么可以通过(t_i) 的时间逃离这里

    否则就要等下一天,但是这时他的武力值会加上(c_i) 。问逃离的期望天数。

    分析

    这题应该算是比较简单的概率DP,

    (dp_i) 表示当前武力值为(i) 时,逃离的期望天数。

    那么显然有

    [dp_i += egin{cases} frac{1}{n}cdot t[i], i geq c_i \ (1 + dp_{i + c_i}),i < c_i end{cases} ]

    注意数组开到两倍(细节)

    double dp[10005 << 1];
    int vis[10005 << 1];
    int c[105];
    int t[105];
    int n, m;
    
    double dfs(int x) {
        if (vis[x]) return dp[x];
        double ans = 0;
        for (int i = 0; i < n; i++)
            if (x > c[i]) ans += 1.0 / n * t[i];
            else ans += 1.0 / n * (1 + dfs(x + c[i]));
        return dp[x] = ans;
    }
    
    int main() {
        while (~scanf("%d%d", &n, &m)) {
            memset(vis, 0, sizeof vis);
            memset(dp, 0, sizeof dp);
            for (int i = 0; i < n; i++) c[i] = readint(),t[i] = (1 + sqrt(5)) / 2 * c[i] * c[i];
            printf("%.3f
    ", dfs(m));
        }
    }
    
  • 相关阅读:
    网络爬虫基础练习
    综合练习:词频统计
    画图
    Hadoop综合大作业
    hive基本操作与应用
    理解MapReduce计算构架
    熟悉HBase基本操作
    爬虫大作业
    熟悉常用的HDFS操作
    数据结构化与保存
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13543325.html
Copyright © 2011-2022 走看看