显然直接倒推就好了
示例程序:
#include<cstdio>
const int maxn=1005;
int n,m;
double f[maxn][maxn],p[maxn][maxn][3];
int main(){
while (~scanf("%d%d",&n,&m)){
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
scanf("%lf%lf%lf",&p[i][j][0],&p[i][j][1],&p[i][j][2]);
f[n][m]=0;
for (int i=n;i;i--)
for (int j=m;j;j--)
if (!(i==n&&j==m)&&p[i][j][0]!=1)
f[i][j]=(p[i][j][1]*f[i][j+1]+p[i][j][2]*f[i+1][j]+2)/(1-p[i][j][0]);
printf("%.3lf\n",f[1][1]);
}
return 0;
}

本文介绍了一种使用动态规划解决概率问题的方法,并提供了一个具体的示例程序。通过倒推的方式,计算在一个给定的概率转移矩阵中从初始状态到达目标状态所需的期望步数。
635

被折叠的 条评论
为什么被折叠?



