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
",f[1][1]);
21     }
22     return 0;
23 }
View Code
原文地址:https://www.cnblogs.com/gryzy/p/14422270.html