标签:
http://acm.split.hdu.edu.cn/showproblem.php?pid=3853
题意:每一个格子有三个概率,分别是原地不动的概率,走到(i,j+1)的概率,走到(i+1,j)的概率,保证在边界的时候相对的概率为0,求从(1,1)走到(r,c)的期望。
思路:居然连圆神的题目都能出Orz,注意一个如果原地不动的概率为1要跳过。
1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 #define N 1010 6 7 double dp[N][N]; 8 double maze[N][N][3]; 9 10 int main() 11 { 12 int r, c; 13 scanf("%d%d", &r, &c); 14 while(~scanf("%d%d", &r, &c)) { 15 for(int i = 1; i <= r; i++) { 16 for(int j = 1; j <= c; j++) { 17 for(int k = 0; k < 3; k++) { 18 scanf("%lf", &maze[i][j][k]); 19 } 20 } 21 } 22 dp[r][c] = 0; 23 for(int i = r; i > 0; i--) { 24 for(int j = c; j > 0; j--) { 25 if(j == c && i == r) continue; 26 if(maze[i][j][0] == 1) continue; // 坑点,如果为1的话会永远无法走出去 27 dp[i][j] = (maze[i][j][1] * dp[i][j+1] + maze[i][j][2] * dp[i+1][j] + 2) / ((double)1 - maze[i][j][0]); 28 } 29 } 30 printf("%.3f\n", dp[1][1]); 31 } 32 return 0; 33 }
标签:
原文地址:http://www.cnblogs.com/fightfordream/p/5790556.html