题目大意:
在n*m的地图中,每个点有三种情况;
1.停留在原地概率为a。
2.向右走一格,概率为b。
3.向下走一格,概率为c。
数据保证有解。
每做一次决定需要消耗两颗仙丹,从1,1到n,m需要消耗仙丹的期望值。
题目分析:
到着dp一下,或者dfs。
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define N 1005
#define eps 0.0000001
double d[N][N];
double a[N][N],b[N][N],c[N][N];
int R,C;
int main()
{
while(~scanf("%d%d",&R,&C))
{
//d[R-1][C-1]=0;
memset(d,0,sizeof d);
for(int i=1; i<=R; i++)
{
for(int j=1; j<=C; j++)
{
scanf("%lf%lf%lf",&a[i][j],&b[i][j],&c[i][j]);
}
}
for(int i=R; i>0; i--)
{
for(int j=C; j>0; j--)
{
if(i == R&&j==C)continue;
if(fabs(1-a[i][j])<=eps)continue;
d[i][j]=(b[i][j]*d[i][j+1]+c[i][j]*d[i+1][j]+2)/(1-a[i][j]);
}
}
printf("%.3f\n",d[1][1]);
}
}