很水的题,但要注意的是必须处理分母为0的情况
#include<bits/stdc++.h> using namespace std; const double esp = 1e-5; const int maxn = 1050; double p[maxn][maxn][4],e[maxn][maxn]; int r,c; int main(){ while(scanf("%d%d",&r,&c)!=EOF){ memset(e,0,sizeof e); for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) scanf("%lf%lf%lf",&p[i][j][1],&p[i][j][2],&p[i][j][3]); e[r][c]=0; for(int i=r;i>=1;i--) for(int j=c;j>=1;j--){ if(i==r && j==c || p[i][j][1]==1)continue; double p21=p[i][j][2]/(1-p[i][j][1]); double p31=p[i][j][3]/(1-p[i][j][1]); e[i][j]=p21*e[i][j+1]+p31*e[i+1][j]+2/(1-p[i][j][1]); } printf("%.3lf ",e[1][1]); } }