#include <stdio.h> #include <iostream> #define maxn 1010 double p[maxn][maxn][4]; double dp[maxn][maxn]; using namespace std; int main() { int r,c; while(scanf("%d%d",&r,&c)==2) { for(int i=1; i<=r; i++) for(int j=1; j<=c; j++) for(int k=1; k<=3; k++) scanf("%lf",&p[i][j][k]); dp[r][c]=0; for(int i=r; i>=1; i--) //根据所求量dp[1][1]和已知量dp[r][c]注意循环的顺序.即由已知量推未知量,所以方程应当进行变形。 { for(int j=c; j>=1; j--) { if(p[i][j][1]==1) dp[i][j]=0;//注意概率还是留在原地做出判断的概率!! else dp[i][j]=(dp[i+1][j]*p[i][j][3]+dp[i][j+1]*p[i][j][2]+2)/(1-p[i][j][1]); } } printf("%.3lf\n",dp[1][1]); } return 0; }