HDU 3853 LOOPS(概率dp)
題目大意:迷宮是一個R*C的佈局,每個格子中給出停留在原地,往右走一個,往下走一格的概率,起點在(1,1),終點在(R,C),每走一格消耗兩點能量,求出最後所需要的能量期望
dp[i][j]表示:從(i,j)到終點的期望。所以還是dp[R][C] = 0;
每次走可以到達三種情況:1.自己的位置;2.i+1的位置;3.j+1的位置。
LOOPS
Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Total Submission(s): 1928 Accepted Submission(s): 765
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.
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
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 2
0.00 0.50 0.50 0.50 0.00 0.50
0.50 0.50 0.00 1.00 0.00 0.00
Sample Output
6.000
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-7
#define M 1000100
#define LL __int64
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
const int maxn = 1010;
using namespace std;
double dp[maxn][maxn];
double p[maxn][maxn][3];
int main()
{
int n, m;
while(cin >>n>>m)
{
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
for(int k = 0; k < 3; k++)
scanf("%lf",&p[i][j][k]);
memset(dp, 0, sizeof(dp));
for(int i = n; i >= 1; i--)
{
for(int j = m; j >= 1; j--)
{
if(fabs(1-p[i][j][0]) < eps)
continue;
if(i == n && j == m)
continue;
if(j == m)
dp[i][j] += (dp[i+1][j]*p[i][j][2] + 2)/(1.0-p[i][j][0]);
else if(i == n)
dp[i][j] += (dp[i][j+1]*p[i][j][1] + 2)/(1.0-p[i][j][0]);
else
dp[i][j] += (dp[i+1][j]*p[i][j][2] + dp[i][j+1]*p[i][j][1] + 2)/(1.0-p[i][j][0]);
}
}
printf("%.3lf\n",dp[1][1]);
}
return 0;
}
相關文章
- HDU 3853 LOOPS:期望dp【網格型】OOP
- HDU 4326Game(比較難理解的概率dp)GAM
- 2014鞍山網路賽 E題||hdu 5001 概率dp
- 概率DP入門題
- 概率DP總結 by kuangbin
- hdu 4089||2011年北京現場賽I題 概率dp(公式不好推)公式
- SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式公式
- codeforces 148 D 概率dp
- POJ 3744 概率dp+矩陣矩陣
- codeforces 148 D Bag of mice(概率dp)
- HDU 4669 Mutiples on a circle (DP , 統計)
- Codeforces 148D Bag of mice (概率dp)
- 【基礎dp】HDU 1260 Tickets
- hdu 3401 單調佇列+DP佇列
- HDU 4455 Substrings(預處理+dp)
- 【演算法學習筆記】概率與期望DP演算法筆記
- HDU 6415 Rikka with Nash Equilibrium (DP)UI
- 【dp】HDU - 1069 Monkey and BananaNaN
- hdu4374單調佇列+dp佇列
- HDU 5119 Happy Matt Friends(DP)APP
- HDU 5326 Work (基礎樹形dp)
- hdu 4123 樹形DP+RMQMQ
- lightoj 1030 Discovering Gold (基礎概率dp)Go
- HDU6415:Rikka with Nash Equilibrium(dp)UI
- 【基礎dp】HDU 1176 免費餡餅
- HDU 5067 Harry And Dig Machine(狀壓dp)Mac
- BZOJ3853 : GCD ArrayGC
- 動態規劃之經典數學期望和概率DP動態規劃
- POJ3744 Scout YYF I (概率DP + 矩陣優化)矩陣優化
- HDU 1227 Fast Food(簡單二維dp)AST
- hdu 1069 Monkey and Banana(簡單dp)NaN
- HDU4427Math Magic (dp+滾動陣列)陣列
- HDU 3530 Subsequence (dp+單調佇列)佇列
- hdu 3507 斜率優化DP入門題優化
- hdu ---(4517)小小明系列故事——遊戲的煩惱(Dp)遊戲
- HDU3944 DP? (LUCAS定理+階乘預處理)
- 【基礎dp】HDU 1257 最少攔截系統
- hdu4313 貪心並查集 || 樹形dp並查集