zoukankan      html  css  js  c++  java
  • hdu3853_概率dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853

    题目大意:起点(1, 1)终点(r, c), 每 个网格点(i, j)有一个传送装置,可以到(i, j)、(i, j+1)、(i, j+1), 不管走或不走,都消耗2个能量,问到终点消耗能量的期望是多少。

    答案不大于 1000000

    当停留在某点的概率等于1时,是不能走出去的,这时答案趋于无穷大,所以不能到这种网格点

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <cstdlib>
     6 #include <cmath>
     7 #include <set>
     8 #include <map>
     9 #include <queue>
    10 #include <vector>
    11 #define INF 0x3f3f3f3f
    12 using namespace std;
    13 
    14 const int N = 1010;
    15 double p1[N][N], p2[N][N], p3[N][N], dp[N][N];
    16 int main()
    17 {
    18     int r, c;
    19     while(~scanf("%d %d", &r, &c))
    20     {
    21         memset(dp, 0, sizeof(dp));
    22         memset(p1, 0, sizeof(p1));
    23         memset(p2, 0, sizeof(p2));
    24         memset(p3, 0, sizeof(p3));
    25         for(int i = 1; i <= r; i++)
    26             for(int j = 1; j <= c; j++)
    27                 scanf("%lf %lf %lf", &p1[i][j], &p2[i][j], &p3[i][j]);
    28         for(int i = r; i > 0; i--)
    29         {
    30             for(int j = c; j > 0; j--)
    31             {
    32                 if(i == r && j == c)
    33                     continue;
    34                 if(1 - p1[i][j] == 0)
    35                     continue;
    36                 dp[i][j] = (dp[i][j + 1] * p2[i][j] + dp[i + 1][j] * p3[i][j] + 2) / (1 - p1[i][j]);
    37             }
    38         }
    39         printf("%.3lf
    ", dp[1][1]);
    40     }    
    41     return 0;
    42 }
    View Code
  • 相关阅读:
    Codevs1684 垃圾陷阱
    Codevs1540银河英雄传说[并查集]
    Poj1182食物链[并查集]
    树的顺序遍历的应用
    树的顺序遍历
    ARTS打卡
    定位iOS代码中崩溃的位置
    leetcode 24
    leetcode 24
    Drafter简单介绍
  • 原文地址:https://www.cnblogs.com/luomi/p/5695953.html
Copyright © 2011-2022 走看看