题意:迷宫是一个R*C的布局,每个格子中给出停留在原地,往右走一个,往下走一格的概率,起点在(1,1),终点在(R,C),每走一格消耗两点能量,求出最后所需要的能量期望
简单概率dp
注意 原地不动为1的概率!
#include<bits/stdc++.h> using namespace std; #define N 1005 double p[N][N][3]; double dp[N][N]; int main() { int n,m; while(scanf("%d%d",&n,&m)==2) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) for(int k=0;k<3;k++) scanf("%lf",&p[i][j][k]); memset(dp,0,sizeof dp); for(int i=n;i>=1;i--) for(int j=m;j>=1;j--) { if(i==n&&j==m)continue; if( fabs(p[i][j][0]-1) <1e-7)continue; dp[i][j]=(p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j]+2)/(1-p[i][j][0]); } printf("%.3lf ",dp[1][1]); } }