首页 > 其他 > 详细

hdu 3853 概率dp

时间:2014-12-03 00:18:35      阅读:311      评论:0      收藏:0      [点我收藏+]
 1 /*
 2 题目大意:一个n*c的网格,求从(1,1)到(n,c)花费魔法值的期望。
 3 每次开启一个通道需要花费2魔法值,有三个方向可以走
 4 在(x,y)位置时,分别转向
 5 1.(x,y),概率是p(x,y*3-2)
 6 2.(x,y+1),概率是p(x,y*3-1)
 7 3.(x+1,y),概率是p(x,y*3)
 8 
 9 dp[x][y]=p[x][y*3-2]*d[x][y]+p[x][y*3-1]*dp[x][y+1]+p[x][y*3]*dp[x+1][y]+2;
10 */
11 #include <iostream>
12 #include <cstdio>
13 #include <cstring>
14 #include <cmath>
15 using namespace std;
16 
17 const double eps=1e-8;
18 const int maxn=1005;
19 double p[maxn][3*maxn],dp[maxn][maxn];
20 
21 int main()
22 {
23     int n,m,i,j;
24     while(~scanf("%d%d",&n,&m))
25     {
26         memset(p,0,sizeof(p));
27         memset(dp,0,sizeof(dp));
28         for(i=1;i<=n;i++)
29         {
30             for(j=1;j<=3*m;j++)
31                 scanf("%lf",&p[i][j]);
32         }
33         for(i=n;i>0;i--)
34         {
35             for(j=m;j>0;j--)
36             {
37                 if(i==n && j==m) continue;
38                 if(fabs(1-p[i][j*3-2])<eps) //呆在原地的概率为1
39                     continue;
40                 dp[i][j]=(p[i][j*3-1]*dp[i][j+1]+p[i][j*3]*dp[i+1][j]+2)/(1-p[i][j*3-2]);
41             }
42         }
43         printf("%.3lf\n",dp[1][1]);
44     }
45     return 0;
46 }

 

hdu 3853 概率dp

原文:http://www.cnblogs.com/xiong-/p/4138905.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!