您的位置:首页 > 其它

HDU 3853 概率dp

2016-03-08 21:45 330 查看
#include <cstdio>
#include <cmath>
const int maxn = 1E3 + 10;
const double eps = 1e-8;
double dp[maxn][maxn], p1[maxn][maxn], p2[maxn][maxn], p3[maxn][maxn];
int R, C;
int main(int argc, char const *argv[])
{
while (~scanf("%d%d", &R, &C) && R + C)
{
for (int i = 1; i <= R; i++)
for (int j = 1; j <= C; j++)
scanf("%lf%lf%lf", &p1[i][j], &p2[i][j], &p3[i][j]);
dp[R][C] = 0;
for (int i = R; i >= 1; i--)
for (int j = C; j >= 1; j--)
{
if (i == R && j == C) continue;
if (fabs(1 - p1[i][j]) < eps) continue;
dp[i][j] = p2[i][j] / (1 - p1[i][j]) * dp[i][j + 1] + p3[i][j] / (1 - p1[i][j]) * dp[i + 1][j] + 2 / (1 - p1[i][j]);
}
printf("%.3lf\n", dp[1][1]);
}
return 0;
}


设dp[i][j]表示(i,j)到(R,C)需要消耗的能量

dp[i][j]=p1[i][j]*dp[i][j]+p2[i][j]*dp[i][j+1]+p3[i][j]*dp[i+1][j]+2;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: