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

题意:

  有一个n*m的网格。

  给出在每个格子时:留在原地、向右走一格,向下走一格的概率。

  每走一格会消耗2点体力。

  问你从(1,1)到达终点(n,m)消耗体力的期望。

题解:

  表示状态:

    dp[i][j] = rest steps(剩余路程花费体力的期望)

    i,j:现在的位置

  找出答案:

    ans = dp[0][0]

  如何转移:

    期望dp的套路:考虑子期望。。。

    now: dp[i][j]

    能转移到的子期望:dp[i][j](留在原地),dp[i][j+1](向右),dp[i+1][j](向下)

    dp[i][j] = dp[i][j]*trans[i][j][0]

          + ( dp[i][j+1]*trans[i][j][1]

            + dp[i+1][j]*trans[i][j][2] + 2 )

    移项:

    dp[i][j] = ( dp[i][j+1]*trans[i][j][1]

            + dp[i+1][j]*trans[i][j][2] + 2 )

          / (1-trans[i][j][0])

  边界条件:

    dp[n-1][m-1] = 0

    到达终点后不用再耗体力。

  注:(1)对于所有越界的概率应看成0。

    (2)除法要保证除数不为0。

AC Code:

 // state expression:
// dp[i][j] = rest steps
// i,j: present pos
//
// find the answer:
// ans = dp[0][0]
//
// transferring:
// now: dp[i][j] -> dp[i][j], dp[i+1][j], dp[i][j+1]
// dp[i][j] = dp[i][j]*trans[i][j][0]
// + (dp[i][j+1]*trans[i][j][1]
// + dp[i+1][j]*trans[i][j][2] + 2)
// dp[i][j] = (dp[i][j+1]*trans[i][j][1]
// + dp[i+1][j]*trans[i][j][2] + 2)
// / (1-trans[i][j][0])
//
// boundary:
// dp[n-1][m-1] = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005 using namespace std; int n,m;
double dp[MAX_N][MAX_N];
double trans[MAX_N][MAX_N][]; void read()
{
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
for(int k=;k<;k++)
{
scanf("%lf",&trans[i][j][k]);
}
}
}
} void solve()
{
memset(dp,,sizeof(dp));
for(int i=n-;i>=;i--)
{
for(int j=m-;j>=;j--)
{
if(i==n- && j==m-) continue;
if(trans[i][j][]==1.0) continue;
dp[i][j]=(dp[i][j+]*trans[i][j][]+dp[i+][j]*trans[i][j][]+2.0)/(1.0-trans[i][j][]);
}
}
} void print()
{
printf("%.3f\n",dp[][]);
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
read();
solve();
print();
}
}

最新文章

  1. Excel到底最多可以有多少行
  2. 解决在国内更新android sdk时连不到服务器的问题
  3. 04-23 Android 课堂笔记
  4. 看完这些,你就算得上既了解围棋又了解alphago了
  5. 核稀疏表示分类(KSRC)
  6. 【转】DataGridView显示行号
  7. TcxVerticalGrid demo
  8. LoadRunner 录制IE 8卡死
  9. org.springframework.beans.factory.BeanCreationException: 求教育!
  10. 02js高级Function
  11. Screwturn搭建企业内部wiki
  12. fatal error C1083: Cannot open precompiled header file: &#39;Debug/xxoo.pch&#39;: No such file or directory
  13. 生成SQL Server数据字典
  14. docker swarm 搭建与服务更新
  15. Win10手记-取色器ColorPicker的实现
  16. android系统属性获取及设置
  17. 简单说说Vue
  18. 【Visual Studio】报错SignTool Error: No certificates were found that met all the given criteria.
  19. iOS打电话、发短信、发邮件功能开发
  20. PCB标识说明

热门文章

  1. Solidworks如何改变零件颜色
  2. &amp;lt;&amp;lt;Python基础教程&amp;gt;&amp;gt;学习笔记 | 第04章 | 字典
  3. vuex 中关于 mapMutations 的作用
  4. POJ 2001 Shortest Prefixes 【 trie树(别名字典树)】
  5. 在Linux下安装R语言软件
  6. iOS SDK具体解释之UIDevice(系统版本号,设备型号...)
  7. java代码实现输出指定以.java结尾的文件的绝对路径
  8. jenkins 构建一个前端web项目
  9. 聊聊高并发(三十九)解析java.util.concurrent各个组件(十五) 理解ExecutorService接口的设计
  10. VMware Workstation 永久许可证密钥