博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3853 期望概率DP
阅读量:5328 次
发布时间:2019-06-14

本文共 1126 字,大约阅读时间需要 3 分钟。

期望概率DP简单题

从[1,1]点走到[r,c]点,每走一步的代价为2

给出每一个点走相邻位置的概率,共3中方向,不动: [x,y]->[x][y]=p[x][y][0] ,  右移:[x][y]->[x][y+1]=p[x][y][1];  左移:[x][y]->[x+1][y]=p[x][y][2];

问最后走到[r,c]的期望

dp[i][j]为从[i][j]点走到[r][c]的期望

有方程:

dp[i][j]=    (dp[i][j]+2)*p[i][j][0]  +   (dp[i][j+1]+2)*p[i][j][1]    +    (dp[i+1][j]+2)*p[i][j][2] ;

移项合并: dp[i][j]= (  (dp[i][j+1]+2)*p[i][j][1]    +    (dp[i+1][j]+2)*p[i][j][2]   +   p[i][j][0]*2  )  /  (1-p[i][j][0]) 

特判p[i][j][0]==1 的情况 

#include "stdio.h"#include "string.h"#include "math.h"double p[1010][1010][3],dp[1010][1010];int main(){    int n,m,i,j;    while (scanf("%d%d",&n,&m)!=EOF)    {        for (i=1;i<=n;i++)            for (j=1;j<=m;j++)            scanf("%lf%lf%lf",&p[i][j][0],&p[i][j][1],&p[i][j][2]);        memset(dp,0,sizeof(dp));        for (i=n;i>=1;i--)            for (j=m;j>=1;j--)            {                dp[i][j]=(dp[i][j+1]+2)*p[i][j][1]+(dp[i+1][j]+2)*(p[i][j][2])+p[i][j][0]*2;                if (fabs(p[i][j][0]-1)<=0.00000000001) dp[i][j]=0;                else dp[i][j]/=(1-p[i][j][0]);            }        printf("%.3lf\n",dp[1][1]);    }    return 0;}

转载于:https://www.cnblogs.com/blfshiye/p/5071939.html

你可能感兴趣的文章
C# 索引器
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
delphi 内嵌汇编例子
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>