HDU 3853 LOOPS

来源:互联网 发布:apache tomcat 6下载 编辑:程序博客网 时间:2024/05/27 06:12

LOOPS

Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)
Total Submission(s): 3541    Accepted Submission(s): 1426


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

Homura wants to help her friend Madoka save the world. But because of the plot of the Boss Incubator, she is trapped in a labyrinth called LOOPS.

The planform of the LOOPS is a rectangle of R*C grids. There is a portal in each grid except the exit grid. It costs Homura 2 magic power to use a portal once. The portal in a grid G(r, c) will send Homura to the grid below G (grid(r+1, c)), the grid on the right of G (grid(r, c+1)), or even G itself at respective probability (How evil the Boss Incubator is)!
At the beginning Homura is in the top left corner of the LOOPS ((1, 1)), and the exit of the labyrinth is in the bottom right corner ((R, C)). Given the probability of transmissions of each portal, your task is help poor Homura calculate the EXPECT magic power she need to escape from the LOOPS.




 

Input
The first line contains two integers R and C (2 <= R, C <= 1000).

The following R lines, each contains C*3 real numbers, at 2 decimal places. Every three numbers make a group. The first, second and third number of the cth group of line r represent the probability of transportation to grid (r, c), grid (r, c+1), grid (r+1, c) of the portal in grid (r, c) respectively. Two groups of numbers are separated by 4 spaces.

It is ensured that the sum of three numbers in each group is 1, and the second numbers of the rightmost groups are 0 (as there are no grids on the right of them) while the third numbers of the downmost groups are 0 (as there are no grids below them).

You may ignore the last three numbers of the input data. They are printed just for looking neat.

The answer is ensured no greater than 1000000.

Terminal at EOF


 

Output
A real number at 3 decimal places (round to), representing the expect magic power Homura need to escape from the LOOPS.

 

Sample Input
2 20.00 0.50 0.50 0.50 0.00 0.500.50 0.50 0.00 1.00 0.00 0.00
 

Sample Output
6.000
 

Source
2011 Invitational Contest Host by BUPT
 

概率DP。

在做这题之前我并不是很明白“正向推概率,反向推期望”这句话。

现在明白了。当p0=1的时候,此时期望是已知的dp[i][j]=0;

然后用此时的dp状态去向前推那些p0不为一的,直到结束。

最后dp[0][0]保存的就是所求的期望。

其实这是一个逆推的过程。

转移方程便如代码所示。

dp[i][j]=p0[i][j]==1?0:(p0[i][j]*2+p1[i][j]*(dp[i][j+1]+2)+p2[i][j]*(dp[i+1][j]+2))/(1-p0[i][j]);

后面那个长长的式子是这样推出来的。

在大牛的博客上看到这样一句话。期望=sum((期望+实验结果)*概率)

这里的实验结果就是单次消耗的魔法值2。


#include <stdio.h>#define N 1005double p0[N][N],p1[N][N],p2[N][N],dp[N][N];int main(){        int r,c;        while(scanf("%d%d",&r,&c)>0)        {                for(int i=0;i<r;i++)                        for(int j=0;j<c;j++)                                scanf("%lf%lf%lf",&p0[i][j],&p1[i][j],&p2[i][j]);                for(int i=r-1;i>=0;i--)                        for(int j=c-1;j>=0;j--)                                dp[i][j]=p0[i][j]==1?0:(p0[i][j]*2+p1[i][j]*(dp[i][j+1]+2)+p2[i][j]*(dp[i+1][j]+2))/(1-p0[i][j]);                printf("%.3lf\n",dp[0][0]);        }        return 0;}


 
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 金毛流鼻涕微黄怎么办 狗狗下眼皮红了怎么办 金毛眼睛打肿了怎么办 金毛的眼睛红怎么办 眼睛干涩有红血丝怎么办 小孩子眼睛红有眼屎怎么办 狗狗的肉垫粗糙怎么办 狗狗眼睛变蓝色怎么办 脸被太阳晒伤了怎么办 皮肤晒伤红肿痒怎么办 3岁儿童频繁眨眼怎么办 狗狗的眼睛红肿怎么办 脸过敏发红怎么办不痒 上眼皮红肿痒是怎么办 眼睛痒了几天了怎么办 眼睛肿了还痒怎么办 孩子脸上有红血丝怎么办 脸上长了红血丝怎么办 指甲受创出血了怎么办 手指被挤压紫了怎么办 眼睛撞了有淤血怎么办 下眼底有小白点怎么办 狗的白眼球充血怎么办 眼球有出血点是怎么办 吃阿胶上火了该怎么办 胎儿胼胝体发育不良怎么办 鸡眼看到硬芯了怎么办 小脚趾起茧子疼怎么办 脚起老茧很痛怎么办 化疗后骨髓抑制严重怎么办 胃炎引起的胃胀怎么办 胃病胀肚子很鼓怎么办 小孩淋巴结发炎肚子疼痛怎么办 顺产后子宫脱垂怎么办 顺产完子宫脱垂怎么办 额头长了个鱼鳞怎么办 脸上长了很多痣怎么办 做过狐臭的疤痕怎么办 痤疮留下的红印怎么办 脸上疤掉了黑印怎么办 脸上有黑色的疤怎么办