zoukankan      html  css  js  c++  java
  • HDU4089(概率dp)

    题解

    要点:

    1.转移方程分三段,这个……有点复杂但是还好吧……大概就是求啥设啥,然后只通过可行的状态过来。在纸上记一记。

    2.每层里面必须先求dp[i][i],简直就是我求我自己……用类似进制数那种方式解个方程。

    3.居然还有eps特判这事情。果然去掉标准同步以后就不能用puts了,会WA~

     1 const int maxn = 2005;
     2 const db eps = 1e-5;
     3 int n, m, k;
     4 db p1, p2, p3, p4;
     5 db dp[2][maxn];
     6 
     7 int main() {
     8     ios_base::sync_with_stdio(false);
     9     cin.tie(0);
    10     while (cin >> n >> m >> k >> p1 >> p2 >> p3 >> p4) {
    11         if (p4 < eps) {
    12             cout << fixed << setprecision(5) << (db)0 << endl;
    13             continue;
    14         }
    15         init(dp, 0);
    16         dp[1&1][1] = p4 / (p3 + p4);
    17         rep(i, 2, n) {
    18             db sum = 0, pp = 1;
    19             irep(j, i, 1) {
    20                 if (j == 1)    sum += p4 / (1 - p1) * pp;
    21                 else if (1 < j && j <= k)    sum += (p3 * dp[i-1&1][j - 1] + p4) / (1 - p1) * pp;
    22                 else    sum += p3 / (1 - p1) * dp[i-1&1][j - 1] * pp;
    23                 pp *= p2 / (1 - p1);
    24             }
    25             dp[i&1][i] = sum / (1 - pp);
    26 
    27             rep(j, 1, i - 1) {
    28                 if (j == 1)    dp[i&1][j] = (p2 * dp[i&1][i] + p4) / (1 - p1);
    29                 else if (1 < j && j <= k)    dp[i&1][j] = (p2 * dp[i&1][j - 1] + p3 * dp[i-1&1][j - 1] + p4) / (1 - p1);
    30                 else    dp[i&1][j] = (p2 * dp[i&1][j - 1] + p3 * dp[i-1&1][j - 1]) / (1 - p1);
    31             }
    32         }
    33         cout << fixed << setprecision(5) << dp[n&1][m] << endl;
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    pip错误:'utf-8' codec can't decode byte解决方法
    windows中python2与python3共存
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    项目需求分析报告答辩总结
    项目选题报告答辩总结
    项目UML设计(团队)
    # 第七次作业--项目需求分析(团队)
    结对项目--第二次作业
  • 原文地址:https://www.cnblogs.com/AlphaWA/p/10539572.html
Copyright © 2011-2022 走看看