HDOJ 3853 LOOPS (概率DP)

来源:互联网 发布:js开头的白色车牌 编辑:程序博客网 时间:2024/06/01 10:28


点击打开链接


题意:有一个R*C的图,从(1,1)走到(R,C)。每一格都给出了留在原地,向右走一格,向下走一格的概率。无论哪一种都会消耗能量2。求从起点到终点的消耗的期望能量。


为了让状态转移方程比较简单,此题概率DP倒着做的。本题中,dp[i][j]表示从(i,j)到终点所消耗的期望能量。容易得出,dp[i][j] = dp[i][j] * p[i][j][0] + dp[i][j+1] * p[i][j][1] + dp[i+1][j] * p[i][j][2]  + 2。从(i,j)开始往后走一步会怎么样?化简可得状态转移方程。

本题要注意的是特殊情况, 如果p[i][j][0]等于1,那么dp[i][j]就要等于0,这样就意味着走到(i,j)就停住了,所以此后消耗的能量一定为0。所以干脆给dp数组初始化为0,遇到这种情况直接用continue跳过。

还有一个要注意的特殊情况就是超出边界,由于超出边界的走法概率一定为0,就相当于排除了这种走法。


#include<cstdio>#include<cmath>#include<cstring>const int N = 1005;const double eps = 1e-7;double dp[N][N], p[N][N][5];int main(){    int r, c;    while (~scanf("%d%d", &r, &c))    {        memset(dp, 0, sizeof(dp));        for (int i = 1; i <= r; i++)            for (int j = 1; j <= c; j++)            scanf("%lf%lf%lf", &p[i][j][0], &p[i][j][1], &p[i][j][2]);        for (int i = r; i >= 1; i--)            for (int j = c; j >= 1; j--)            {                if (fabs(p[i][j][0] - 1) < eps) continue;                dp[i][j] = (dp[i][j+1] * p[i][j][1] + dp[i+1][j] * p[i][j][2] + 2) / (1 - p[i][j][0]);            }        printf("%.3f\n", dp[1][1]);    }    return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ivvi手机开不开机怎么办 跑鞋子大了一码怎么办 洗浴搓澡出汗多该怎么办 联华超市卡丢了怎么办 飞利浦电视的应用打不开怎么办 贵阳市下岗职工办理门面补贴怎么办 陌陌上被骗了色怎么办 七位数的座机要怎么办 开通米粉卡店铺预留电话号码怎么办 办信用卡没有单位电话怎么办 qq账号永久封停怎么办 qq号给冻结了怎么办 微信被官方封2天怎么办 天虹的卡丢了怎么办 顺丰快递到不了的地区怎么办 信用卡兑换东西超过积分怎么办 新买的冰箱坏了怎么办 买新洗衣机出现克坏怎么办 京东当日达没到达怎么办 兴隆卡不能用了怎么办 龙津时代烂尾了怎么办 三星s8电耗尽无法开机怎么办 杜鹃买回来蔫了怎么办 电视柜比背景墙小了怎么办 美图m8手机发热怎么办 美图t8手机很卡怎么办 美图m6手机发热怎么办 金立m6打电话声音小怎么办 美图m6突然黑屏怎么办 美图t8s死机了怎么办 美图手机音量小怎么办 美图手机突然音量小怎么办 苹果六手机反应慢怎么办 美图t8开机慢怎么办 美图m6s拍照模糊怎么办 8848m4密码忘了怎么办 美图手机m4自拍黑屏怎么办 美图m4相机黑屏怎么办 美图m4手机拍照黑屏怎么办 美图m4拍照黑屏怎么办 美图m4很卡怎么办