HDU3853
期望DP
N*M的网格
每个格子有三个概率,分别为传送到自己,下方,右侧的格子的概率,每一次传送的费用为2.
求从左上角的(1,1)到右下角的(n,m)的期望费用
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1010; 4 int n,m; 5 double gl0[maxn][maxn],gl1[maxn][maxn],gl2[maxn][maxn],f[maxn][maxn]; 6 7 int main() 8 { 9 while(scanf("%d%d",&n,&m)==2){ 10 for(int i=1;i<=n;++i) 11 for(int j=1;j<=m;++j) 12 scanf("%lf%lf%lf",&gl0[i][j],&gl1[i][j],&gl2[i][j]); 13 f[n][m]=0; 14 for(int i=n;i>0;--i) 15 for(int j=m;j>0;--j) 16 { 17 if(gl0[i][j]==1||i==n&&j==m)continue; 18 f[i][j]=(f[i+1][j]*gl2[i][j]+f[i][j+1]*gl1[i][j]+2)/(1-gl0[i][j]); 19 } 20 printf("%.3lf\n",f[1][1]); 21 } 22 return 0; 23 }