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 ...
随机推荐
- iWatch报错: Missing com.apple.developer.healthkit entitlement
今天开发iWatch项目,报错: Optional (Error "Missing come.apple.developer.healthkit entitlement.") Us ...
- 360Webscan Bypass
来到select正则: ? 1 \<.+javascript:window\[.{1}\\x|<.*=(&#\d+?;?)+?>|<.*(data|src)=data: ...
- HDU 4746 Mophues (莫比乌斯反演应用)
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others) Total ...
- 数据结构基础-Hash Table详解(转)
理解Hash 哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping). 映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素.但反过来,集合B中的一个元素可能 ...
- 【Python】使用制表符换行符来添加空白
在编程中,在打印时,有时候需要显示出来的数据看着舒服一点,那么使用制表符(\t).换行符(\n)即可轻松实现 >>> print('zhangsan')zhangsan 加入制表符后 ...
- ALLEGRO修改位号回注ORCAD原理图
资料:ALLEGRO修改位号回注ORCAD原理图 https://wenku.baidu.com/view/54e221e114791711cd7917e2.html?re=view
- ordinal parameter mismatch
© 版权声明:本文为博主原创文章,转载请注明出处 错误描述:Caused by: org.hibernate.HibernateException: ordinal parameter mismatc ...
- Linux系统rootpassword改动
重新启动系统. 进入系统引导界面: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzMzOTg1MQ==/font/5a6L5L2T/fontsi ...
- MVC初了解
MVC:Model-View-Controller,将数据和显示形式分离. Model:能够看做是三层中的D层+B层,实现业务逻辑和与数据库的交互. View:看做是U层,用来显示数据. Contro ...
- RGB颜色空间alpha混合的方法
http://blog.csdn.net/xhhjin/article/details/6444782http://blog.csdn.net/xhhjin/article/details/64454 ...