标签:dp
给你一个地图 每个点只能往下 右 或不走三种方式,告诉你每个点的三种方式的概率 问到达终点的期望;
dp【i】【j】表示(i,j)到终点的期望; dp【i】【j】=(dp【i+1】【j】*map【i】【j】【2】+dp【i】【j+1】*map【i】【j】【3】+2)/(1-map【i】【j】【1】)(有点条件概率的意思) 注意 这是在map【i】【j】【1】!=1的情况下才成立的;
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; double map[1010][1010][4],dp[1010][1010]; int main() { int n,m,i,j; while(~scanf("%d%d",&n,&m)) { for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%lf%lf%lf",&map[i][j][1],&map[i][j][2],&map[i][j][3]); memset(dp,0,sizeof(dp)); for(i=n;i>=1;i--) { for(j=m;j>=1;j--) { if(i==n&&j==m) continue; if(map[i][j][1]!=1)dp[i][j]=(map[i][j][2]*dp[i][j+1]+map[i][j][3]*dp[i+1][j]+2)/(1-map[i][j][1]); } } printf("%.3lf\n",dp[1][1]); } return 0; }
标签:dp
原文地址:http://blog.csdn.net/zxf654073270/article/details/44727793