HDU 3853 LOOPS:期望dp【网格型】
题目链接: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【网格型】的更多相关文章
- HDU 3853 LOOPS 期望dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3853 LOOPS Time Limit: 15000/5000 MS (Java/Others)Me ...
- hdu 3853 LOOPS (概率dp 逆推求期望)
题目链接 LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Tota ...
- HDU 3853 LOOPS 概率DP入门
LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Total Sub ...
- hdu 3853 LOOPS 概率DP
简单的概率DP入门题 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include ...
- HDU 3853 LOOPS 可能性dp(水
在拐~ #include <stdio.h> #include <cstring> #include <iostream> #include <map> ...
- 【HDU3853】LOOPS [期望DP]
LOOPS Time Limit: 5 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Akemi Homura is a ...
- hdu 3853 LOOPS(概率 dp 期望)
Problem Description Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl). Homura wants to help ...
- hdu 3853 LOOPS(基础DP求期望)
题目大意 有一个人被困在一个 R*C(2<=R,C<=1000) 的迷宫中,起初他在 (1,1) 这个点,迷宫的出口是 (R,C).在迷宫的每一个格子中,他能花费 2 个魔法值开启传送通道 ...
- HDU 3853 LOOP (概率DP求期望)
D - LOOPS Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit St ...
随机推荐
- openLayers加载高德地图
之前用openlayers对高德,百度,腾讯,bing,supermap,天地图,arcgis,google等地图进行了对接,今天简单介绍一下openlayers+高德: 在Openlayers.La ...
- IT行业是吃青春饭的吗?
作者:杨中科 1.“it专业的学生太多了,而且就业压力很大”是吗? 现在各个大学为了赚钱拼命扩招,所以不仅IT专业的学生人比较多,而且其他专业的学生人数也比较多,“僧多粥少”就通常意味着就业压 ...
- [转载]使用RoboCopy 命令
经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...
- 【Python】随机漫步
创建Randomwalk()类 我们将使用Python来生成随机漫步数据,再使用matplotlib以引入瞩目的方式将这些数据呈现出来 首先创建类Randomwalk() from random im ...
- jquery:给正则表达式添加变量
http://www.2cto.com/kf/201402/277766.html 正则表达式普通用法:var checkString=/^.*\S+.*$/; //注意正则表达式没有引号 chec ...
- UML--组件图,部署图
组件图用于实现代码之间的物理结构,详细来说,就是实现代码交互.通过接口,将不同的软件,程序连接在一起. [理解] 1.组件的定义相当广泛,包含:源码,子系统,动态链接库,Activex控件. 2.组件 ...
- Jconsole 工具介绍和使用方法
http://chain.blog.163.com/blog/static/14084852320117934024410/ JConsole是一个基于JMX的GUI工具,JDK自带小工具 h ...
- java 接口回调
学习自:http://blog.csdn.net/xiaanming/article/details/8703708/ http://hellosure.iteye.com/blog/1130176 ...
- opencv3.3.1 opencv_contribut 3.3.1 git 20180117最新版的在ubuntu1604上的编译
过程: 1. git clone ... contribut 2. git clone ... opencv 3. git checkout -b v3.3.1 4 gi ...
- HTML5之Canvas绘图(一) ——基础篇
HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把. 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是 ...