思路:
概率dp求期望;
代码:
#include <cstdio> #include <cstring> #include <iostream> using namespace std; #define maxn 1005 int n,m; double p[maxn][maxn][4],dp[maxn][maxn]; int main() { while(scanf("%d%d",&n,&m)!=EOF) { memset(dp,0,sizeof(dp)),memset(p,0,sizeof(p)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) scanf("%lf%lf%lf",&p[i][j][1],&p[i][j][2],&p[i][j][3]); } for(int i=n;i>=1;i--) { for(int j=m;j>=1;j--) { if(i==n&&j==m) continue; if(p[i][j][1]==1.0) continue; dp[i][j]=(dp[i][j+1]*p[i][j][2]+dp[i+1][j]*p[i][j][3]+2.0)/(1.0-p[i][j][1]); } } printf("%.3lf ",dp[1][1]); } return 0; }