解题报告链接:

http://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html

先推公式,设计状态,令DP[i]表示在房间i退出要走步数的期望值,然后推导出关系式,亮点来了,不会搜索···

so,等我学会了搜索后明天再写····

哈哈,已经学会了,自己设计的,和解题报告的不太一样,一个DFS解决···

看代码吧···我不知道怎么说····

贴代码:

  1. //#define debug
  2. #include <cstdio>
  3. #include <vector>
  4. #include <cmath>
  5. #define N 10005
  6. #define eps 1e-10
  7. using namespace std;
  8. vector<int> ve[N];
  9. struct node
  10. {
  11. double ki,wal;
  12. } p[N];
  13. struct para
  14. {
  15. double a,b,c;
  16. };
  17. int n;
  18. bool vis[N];
  19. para dfs(int x)
  20. {
  21. vis[x] = ;
  22. bool flag = true;
  23. para t,t1,t2;
  24. //t1用来求sum(j),其中j为x的子节点
  25. t1.a = ;
  26. t1.b =;
  27. t1.c = ;
  28. for(int i=; i<ve[x].size(); ++i)
  29. {
  30. if(!vis[ve[x][i]])
  31. {
  32. flag =false;
  33. t2 = dfs(ve[x][i]);
  34. t1.a += t2.a;
  35. t1.b += t2.b;
  36. t1.c += t2.c;
  37. }
  38. }
  39. // 对于非叶子节点:j为i的子节点
  40. // Ai = (ki+(1-ki-ei)/m*∑Aj) / (1 - (1-ki-ei)/m*∑Bj);
  41. // Bi = (1-ki-ei)/m / (1 - (1-ki-ei)/m*∑Bj);
  42. // Ci = ( (1-ki-ei)+(1-ki-ei)/m*∑Cj ) / (1 - (1-ki-ei)/m*∑Bj);
  43. // 对于叶子节点:
  44. // Ai = ki;
  45. // Bi = 1 - ki - ei;
  46. // Ci = 1 - ki - ei;
  47. // wal = 1-ki-exi
  48. if(flag)//叶子节点
  49. {
  50. t.a = p[x].ki;
  51. t.b = p[x].wal;
  52. t.c = p[x].wal;
  53. }
  54. else//非叶子节点
  55. {
  56. int m = ve[x].size();
  57. double f = - p[x].wal / m*t1.b;
  58. t.a =(p[x].ki + p[x].wal/m*t1.a) /f ;
  59. t.b = p[x].wal/m/f ;
  60. t.c = (p[x].wal + p[x].wal/m*t1.c) / f;
  61. }
  62. return t;
  63. }
  64. int main()
  65. {
  66. #ifdef debug
  67. freopen("in.c","r",stdin);
  68. #endif
  69. int t;
  70. scanf("%d",&t);
  71. for(int d =; d<=t ; ++d)
  72. {
  73. for(int i=; i<=n; ++i) ve[i].clear();
  74. scanf("%d",&n);
  75. for(int i=; i<n; ++i)
  76. {
  77. int u,v;
  78. scanf("%d%d",&u,&v);
  79. ve[u].push_back(v);
  80. ve[v].push_back(u);
  81. }
  82. for(int i=; i<=n; ++i)
  83. {
  84. int k,e;
  85. scanf("%d%d",&k,&e);
  86. p[i].ki = (double)k/100.0;
  87. p[i].wal = - p[i].ki - (double)e/100.0;
  88. }
  89. memset(vis,,sizeof(vis));
  90. para ans = dfs();
  91. printf("Case %d: ",d);
  92. if(fabs(ans.a-) < eps)
  93. printf("impossible\n");
  94. else
  95. printf("%.6f\n",ans.c/(-ans.a));
  96. }
  97. return ;
  98. }

HDU 4035 Maze 概率DP 搜索的更多相关文章

  1. HDU 4035 Maze 概率dp,树形dp 难度:2

    http://acm.hdu.edu.cn/showproblem.php?pid=4035 求步数期望,设E[i]为在编号为i的节点时还需要走的步数,father为dfs树中该节点的父节点,son为 ...

  2. hdu 4035 Maze 概率DP

        题意:    有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树,    从结点1出发,开始走,在每个结点i都有3种可能:        1.被杀死,回到结点1处(概率为ki)      ...

  3. poj 2096 Collecting Bugs && ZOJ 3329 One Person Game && hdu 4035 Maze——期望DP

    poj 2096 题目:http://poj.org/problem?id=2096 f[ i ][ j ] 表示收集了 i 个 n 的那个. j 个 s 的那个的期望步数. #include< ...

  4. HDU.4035.Maze(期望DP)

    题目链接 (直接)设\(F(i)\)为在\(i\)点走出迷宫的期望步数.答案就是\(F(1)\). 令\(p_i=1-k_i-e_i\),表示\(i\)点沿着边走的概率:\(d_i=dgr[i]\), ...

  5. HDU - 4035 循环型概率DP

    题解待会在上 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring ...

  6. HDU 4035Maze(概率DP)

    HDU 4035   Maze 体会到了状态转移,化简方程的重要性 题解转自http://blog.csdn.net/morgan_xww/article/details/6776947 /** dp ...

  7. HDU4035 Maze (概率DP)

    转:https://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, ...

  8. HDU 3853LOOPS(简单概率DP)

    HDU 3853    LOOPS 题目大意是说人现在在1,1,需要走到N,N,每次有p1的可能在元位置不变,p2的可能走到右边一格,有p3的可能走到下面一格,问从起点走到终点的期望值 这是弱菜做的第 ...

  9. HDU - 1099 - Lottery - 概率dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1099 最最简单的概率dp,完全是等概率转移. 设dp[i]为已有i张票,还需要抽几次才能集齐的期望. 那么dp[ ...

随机推荐

  1. 安装gcc4.8.5

    安装gcc4.8.51. g++ --version, 4.4.7不支持c++112. 升级gcc-c++, 下载gcc    https://gcc.gnu.org/ 官网,镜像下载地址https: ...

  2. onLoad和DomContentLoad的区别

    onLoad是的在页面所有文件加载完成后执行 DomContentLoad是Dom加载完成后执行,不必等待样式脚本和图片加载 domContentLoad更为合理, 原理: 如果是webkit引擎则轮 ...

  3. Java成员变量和局部变量

    Java成员变量和局部变量 一.成员变量和局部变量 二.static关键字 三.成员变量和静态变量区别 四.main函数 五.静态函数什么时候用 六.静态代码块 七.构造代码块 构造代码块先于构造函数 ...

  4. Java注解 框架开发之Java注解的妙用

    原文出处: locality 注解的好处: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以使用一个或者多个注解来替代,这样就使得编程 ...

  5. centos7: vsftpd安装及启动

    安装: yum -y install vsftpd service vsftpd start  注意这句:centos7不能这么启动了 chkconfig vsftpd on vsftpd.conf配 ...

  6. JDBC 与 Bean Shell的使用(二)获取值,并且断言

    这里我们使用的断言方式是BeanShell断言,做一个新增功能的接口测试, 1.发一个post请求,新增测试数据,然后做一个返回数据的响应断言-------大部分人都可以实现这个功能 2.如果是后台业 ...

  7. 20170719xlVBASmartIndent

    Public Sub SmartIndenterProcedure() Dim OneComp As VBComponent Dim StartLine As Long, EndLine As Lon ...

  8. Oracle 11g dataguard check real time apply

    2017年8月24日 16:38 环境:oracle 11.2.0.1 OEL-5.8 注:以下操作都在备库执行 总结方法: 1.FPYJ(125_7)@fpyj123> select open ...

  9. 巧妙利用SVN 实现复制需要部署的文件。

    http://blog.csdn.net/xiaoding133/article/details/39252357 http://blog.csdn.net/sinat_29173167/articl ...

  10. Java虚拟机结构分析

    https://www.cnblogs.com/Eason-S/p/5658188.html https://blog.csdn.net/u013256816/article/details/5148 ...