http://acm.hdu.edu.cn/showproblem.php?pid=3853
有一点坑的地方是如果一个地方停在原地的概率为1,那么该地的期望为0,就相当于这个地方也是一个出口。。。
代码很短
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 const int maxn=1010; 9 const double eps=1e-8; 10 const int modn=998244353; 11 int r,c; 12 double a[maxn][maxn][4]={}; 13 double f[maxn][maxn]={}; 14 int main(){ 15 while(~scanf("%d%d",&r,&c)){ 16 memset(f,0,sizeof(f)); 17 memset(a,0,sizeof(a)); 18 for(int i=1;i<=r;i++){ 19 for(int j=1;j<=c;j++){ 20 for(int k=1;k<=3;k++){ 21 scanf("%lf",&a[i][j][k]); 22 } 23 } 24 } 25 for(int i=r;i>=1;i--){ 26 for(int j=c;j>=1;j--){ 27 if(i==r&&j==c){continue;} 28 if(fabs(1-a[i][j][1])<=1e-5){f[i][j]=0;continue;} 29 f[i][j]=(f[i][j+1]*a[i][j][2]+f[i+1][j]*a[i][j][3]+2)/(1.0-a[i][j][1]); 30 } 31 } 32 printf("%.3f ",f[1][1]); 33 } 34 return 0; 35 }