题目链接: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