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]);
      }
    }

      

  • 相关阅读:
    翻硬币
    排队打水问题
    连续邮资问题
    Linux-AWK命令
    SpringInAction第五章总结 使用配置属性
    SpringInAction 第四章笔记 保护Spring
    SpringInAction第三章笔记 --使用数据
    SpringInAction第二章笔记
    SpringInAction第一章笔记
    SpringBoot启动任务
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5571245.html
Copyright © 2011-2022 走看看