zoukankan      html  css  js  c++  java
  • HDU 3853:LOOPS

    LOOPS

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=3853

    题意:

    有一个网格,从点(1,1)开始走,要走到点(n,m),点(X,Y)可以走到点(X,Y),(X,Y+1),(X+1,Y),概率分别为p0,p1,p2,每走一步耗费2点魔力,求走到终点所耗费的魔力的期望

    题解:

    一道简单的求期望的题,不会求期望的可以看下这里

    具体公式如下: dp[i][j]=p[i][j][0]*dp[i][j]+p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j]

    即:dp[i][j]=(p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j])/(1.0-p[i][j][0])

    此题有个坑点,当点(x,y)的p0为1时,期望为无穷大,但题目保证答案会小于1000000,因此(x,y)这个点一定是到不了的

                 

    代码

    #include<stdio.h>
    #include<math.h>
    const double eps=1e-3;
    double p[1000][1000][3];
    int main()
    {
      int n,m;
      while(~scanf("%d%d",&n,&m))
      {
        for(int i=0;i<n;++i)
        for(int j=0;j<m;++j)
        scanf("%lf%lf%lf",&p[i][j][0],&p[i][j][1],&p[i][j][2]);
        p[n-1][m-1][0]=0.0;
        for(int i=n-1;i>=0;--i)
        for(int j=m-1;j>=0;--j)
        if(i!=n-1||j!=m-1)
        {
          double x=1-p[i][j][0];
          p[i][j][0]=0.0;
          if(fabs(x)<eps)continue;
          if(i<n-1)p[i][j][0]+=p[i][j][2]*p[i+1][j][0];
          if(j<m-1)p[i][j][0]+=p[i][j][1]*p[i][j+1][0];
          p[i][j][0]+=2.0;
          p[i][j][0]/=x;
        }
        printf("%.3f ",p[0][0][0]);
      }
    }

      

  • 相关阅读:
    POJ 2723 Get Luffy Out(2-SAT)
    ZOJ 3613 Wormhole Transport
    HDU 4085 Peach Blossom Spring
    NBUT 1221 Intermediary
    NBUT 1223 Friends number
    NBUT 1220 SPY
    NBUT 1218 You are my brother
    PAT 1131. Subway Map (30)
    ZSTU OJ 4273 玩具
    ZSTU OJ 4272 最佳淘汰算法
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5571245.html
Copyright © 2011-2022 走看看