题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853
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
6.000
题意:
一个人 从一个为r行c列的矩形的左上角走到右下角!
每个点有一个如果有一定的概率分别传送到另一个点!
求她需要的期望值!
代码如下:
#include <cstdio> #include <cstring> double dp[1017][1017]; double a[1017][1017][4]; //dp[i][j] = dp[i][j]*a[i][j][1]+dp[i][j+1]*a[i][j][2]+dp[i+1][j]*a[i][j][3]+2; //每一步需要消耗两点魔力值所以加2 //移项得:dp[i][j] = (dp[i][j+1]*a[i][j][2]+dp[i+1][j]*a[i][j][3]+2)/(1.0-a[i][j][1]); int main() { int r, c; while(~scanf("%d%d",&r,&c)) { for(int i = 1; i <= r; i++) { for(int j = 1; j <= c; j++) { for(int k = 1; k <= 3; k++) { scanf("%lf",&a[i][j][k]); } } } memset(dp, 0,sizeof(dp)); dp[r][c] = 0; for(int i = r; i >= 1; i--) { for(int j = c; j >= 1; j--) { if(i==r && j==c) { continue; } if(a[i][j][1] == 1) { continue;//一定在原地 } dp[i][j] = (dp[i][j+1]*a[i][j][2]+dp[i+1][j]*a[i][j][3]+2)/(1.0-a[i][j][1]); } } printf("%.3lf\n",dp[1][1]); } return 0; }
原文地址:http://blog.csdn.net/u012860063/article/details/45539689