HDU 3853 概率dp

#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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值