HDU 3853 LOOPS:期望dp【网格型】
2024-08-28 23:09:34
题目链接: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();
}
}
最新文章
- Excel到底最多可以有多少行
- 解决在国内更新android sdk时连不到服务器的问题
- 04-23 Android 课堂笔记
- 看完这些,你就算得上既了解围棋又了解alphago了
- 核稀疏表示分类(KSRC)
- 【转】DataGridView显示行号
- TcxVerticalGrid demo
- LoadRunner 录制IE 8卡死
- org.springframework.beans.factory.BeanCreationException: 求教育!
- 02js高级Function
- Screwturn搭建企业内部wiki
- fatal error C1083: Cannot open precompiled header file: &#39;Debug/xxoo.pch&#39;: No such file or directory
- 生成SQL Server数据字典
- docker swarm 搭建与服务更新
- Win10手记-取色器ColorPicker的实现
- android系统属性获取及设置
- 简单说说Vue
- 【Visual Studio】报错SignTool Error: No certificates were found that met all the given criteria.
- iOS打电话、发短信、发邮件功能开发
- PCB标识说明
热门文章
- Solidworks如何改变零件颜色
- &;lt;&;lt;Python基础教程&;gt;&;gt;学习笔记 | 第04章 | 字典
- vuex 中关于 mapMutations 的作用
- POJ 2001 Shortest Prefixes 【 trie树(别名字典树)】
- 在Linux下安装R语言软件
- iOS SDK具体解释之UIDevice(系统版本号,设备型号...)
- java代码实现输出指定以.java结尾的文件的绝对路径
- jenkins 构建一个前端web项目
- 聊聊高并发(三十九)解析java.util.concurrent各个组件(十五) 理解ExecutorService接口的设计
- VMware Workstation 永久许可证密钥