hdu3853 从一个点走到终点期望消耗能量(概率dp入门题)+概率dp初步总结

首先学习概率dp,讲的很好的网站:

http://kicd.blog.163.com/blog/static/126961911200910168335852/

然后也有引自http://blog.csdn.net/auto_ac/article/details/9907881博文的一段话:

 

很多概率题总逃不开用dp转移。           

        期望题总是倒着推过来的,概率是正着推的,多做题就会理解其中的原因
            有些期望题要用到有关 概率 或 期望的常见公式或思想
                  遇到dp转移方程(组)中有环的,多半逃不出高斯消元(手动 和 写代码 两种)
                          这套题中还有道树上的dp转移,还用dfs对方程迭代解方程, 真是大开眼界了
                                    当然还有与各种算法结合的题,关键还是要学会分析
                                               当公式或计算时有除法时, 特别要注意分母是否为零

 

期望的话,比如本题,首先如果要求pos点期望能量,我们看一下他的后继点需要能量,乘以概率加上,再加到达后继点的2点能量,就是pos点的期望,化简一下就能得到递推式==

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<cmath>
 5 #define eps 1e-8
 6 using namespace std;
 7 double dp[1005][1005],p[1005][1005][4];
 8 int main()
 9 {
10   int n,m,i,j,k;
11   while (~scanf("%d%d",&n,&m))
12   {
13     memset(p,0,sizeof(p));
14     for (i=1;i<=n;i++)
15       for (j=1;j<=m;j++)
16         for (k=1;k<=3;k++) scanf("%lf",&p[i][j][k]);
17     memset(dp,0,sizeof(dp));
18     for (i=n;i>=1;i--)
19       for (j=m;j>=1;j--)
20         if (i==n&&j==m) continue;
21         else if (fabs(p[i][j][1]-1)<=eps) continue;
22         else dp[i][j]=dp[i][j+1]*p[i][j][2]/(1-p[i][j][1])+
23  dp[i+1][j]*p[i][j][3]/(1-p[i][j][1])+2.0/(1-p[i][j][1]);
24     printf("%.3lf\n",dp[1][1]);
25   }
26 }
View Code

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853

posted on 2015-03-01 21:52  xiao_xin  阅读(634)  评论(0编辑  收藏  举报

导航