题目链接: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();
}
}

HDU 3853 LOOPS:期望dp【网格型】的更多相关文章

  1. HDU 3853 LOOPS 期望dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3853 LOOPS Time Limit: 15000/5000 MS (Java/Others)Me ...

  2. hdu 3853 LOOPS (概率dp 逆推求期望)

    题目链接 LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Tota ...

  3. HDU 3853 LOOPS 概率DP入门

    LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total Sub ...

  4. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include ...

  5. HDU 3853 LOOPS 可能性dp(水

    在拐~ #include <stdio.h> #include <cstring> #include <iostream> #include <map> ...

  6. 【HDU3853】LOOPS [期望DP]

    LOOPS Time Limit: 5 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Akemi Homura is a ...

  7. hdu 3853 LOOPS(概率 dp 期望)

    Problem Description Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl). Homura wants to help ...

  8. hdu 3853 LOOPS(基础DP求期望)

    题目大意 有一个人被困在一个 R*C(2<=R,C<=1000) 的迷宫中,起初他在 (1,1) 这个点,迷宫的出口是 (R,C).在迷宫的每一个格子中,他能花费 2 个魔法值开启传送通道 ...

  9. HDU 3853 LOOP (概率DP求期望)

    D - LOOPS Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit St ...

随机推荐

  1. AAuto如何设置combobox

    1 在左侧点击下拉组合框,然后再界面中拖拉一个组合框,鼠标单击这个下拉组合框,哟蹙额就可以设置名称,items,文本,其中文本是默认显示的文字,而item是点击之后的东西,中间用";&quo ...

  2. jquery插件jTemplates使用方法

    简单记一下我所做项目中用到的代码,以备以后用的时候一看明确了. 1.jsp(jquery-jtemplates.js下载地址:http://download.csdn.net/detail/xlb74 ...

  3. Java Transaction Management

    Just a few weeks ago, I had a discussion with one of my colleagues about how to manage the transacti ...

  4. SQL CASE WHEN ... THEN ... ELSE.. END 实例

    用一个SQL语句完成不同条件的分组(SELECT部分): select QuoteOrderId,SUM(case when(ApprovalStatus=1)then Amount else 0 e ...

  5. Oracle 中session和processes的初始设置

    http://blog.163.com/succu/blog/static/193917174201252911727149/ 1.sessions   在初始化参数所设定的限制中,最为人所知的估计就 ...

  6. Linux Sed命令具体解释+怎样替换换行符&quot;\n&quot;(非常多面试问道)

    Sed Sed是一个强大的文本处理工具 能够採用正则匹配.对文本进行插入删除改动等操作 Sed处理的时候,一次处理一行,每一次把当前处理的存放在暂时缓冲区.处理完后输出缓冲区内容到屏幕,然后把下一行读 ...

  7. 面试题 15:链表中倒数第 k 个结点

    面试题 15:链表中倒数第 k 个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯, 本题从 1 开始计数,即链表的尾结点是倒数第一个结点.例如一个有 6 个结点的 链 ...

  8. 1. WPF学习之概述

    <深入浅出WPF> 前言: C#专业的朋友推荐的WPF入门书籍<深入浅出WPF>,没学过的朋友从今天开始和我一起开启WPF学习之旅吧! 什么是WPF? WPF 是windows ...

  9. adb 功能大全

    当然首先是须要进入cmd命令行,执行 adb shell的. 以下介绍一些我们常常须要可是不怎么会用的命令 1. df -sh 查看当前目录占用空间大小 2. du 查看系统如今的内存使用情况 3. ...

  10. ROR部署到Heroku出现Application Error和code=H10 desc=&quot;App crashed“问题

    1.问题发现之前的准备 在读<Learn Python In Hard Way>的时候,发现作者谈到一个非常有趣的事情,在做一些有趣的事情之前做的无聊的事情叫做yak shaving,牦牛 ...