思路:

在没有梯子与蛇的时候很容易想到如下公式:

dp[i]=1+(∑dp[i+j])/6

但是现在有梯子和蛇也是一样的,初始化p[i]=i;

当有梯子或蛇时转移为p[a]=b;

这样方程变为:

dp[i]=1+(∑dp[p[i+j]])/6

再就是注意当i+j>100时,停在原地不变。

代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. #define M 105
  7. #define eps 1e-6
  8. using namespace std;
  9. double ans[M],an[M][M];
  10. int p[M];
  11. void GAUSS()
  12. {
  13. int i,j,t,k;
  14. for(i=;i<=;i++){
  15. t=i;
  16. for(j=i+;j<=;j++)
  17. if(an[t][i]<an[j][i]) t=j;
  18. if(t!=i){
  19. for(j=;j<=;j++)
  20. swap(an[i][j],an[t][j]);
  21. }
  22. if(fabs(an[i][i])<eps) continue;
  23. for(j=i+;j<=;j++){
  24. if(fabs(an[j][i])>eps){
  25. double tt=an[j][i]/an[i][i];
  26. for(k=i;k<=;k++)
  27. an[j][k]=an[j][k]-an[i][k]*tt;
  28. }
  29. }
  30. }
  31. for(i=;i>=;i--){
  32. for(j=;j>i;j--){
  33. an[i][]-=an[i][j]*ans[j];
  34. }
  35. if(fabs(an[i][i])>eps)
  36. ans[i]=an[i][]/an[i][i];
  37. if(fabs(ans[i])<eps) ans[i]=0.0;
  38. }
  39. }
  40. void solve()
  41. {
  42. memset(ans,,sizeof(ans));
  43. memset(an,,sizeof(an));
  44. for(int i=;i<=;i++){
  45. an[i][i]=an[i][]=6.0;
  46. for(int j=;j<=;j++){
  47. if(i+j>) an[i][i]-=1.0;
  48. else an[i][p[i+j]]+=-1.0; //感开始没有+,一直错啊…………
  49. }
  50. }
  51. GAUSS();
  52. }
  53. int main()
  54. {
  55. int t,ca=,n,m,a,b;
  56. scanf("%d",&t);
  57. while(t--){
  58. scanf("%d",&n);
  59. for(int i=;i<=;i++) p[i]=i;
  60. for(int i=;i<n;i++){
  61. scanf("%d %d",&a,&b);
  62. p[a]=b;
  63. }
  64. solve();
  65. printf("Case %d: %.8lf\n",++ca,ans[]);
  66. }
  67. return ;
  68. }

light oj 1151 - Snakes and Ladders 高斯消元+概率DP的更多相关文章

  1. LightOJ 1151 - Snakes and Ladders 高斯消元+概率DP

    首先来个期望的论文,讲的非常好,里面也提到了使用线性方程组求解,尤其适用于有向图的期望问题. 算法合集之<浅析竞赛中一类数学期望问题的解决方法> http://www.lightoj.co ...

  2. Light OJ 1272 Maximum Subset Sum 高斯消元 最大XOR值

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011686226/article/details/32337735 题目来源:problem=12 ...

  3. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...

  4. BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]

    2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...

  5. Broken robot CodeForces - 24D (三对角矩阵简化高斯消元+概率dp)

    题意: 有一个N行M列的矩阵,机器人最初位于第i行和第j列.然后,机器人可以在每一步都转到另一个单元.目的是转到最底部(第N个)行.机器人可以停留在当前单元格处,向左移动,向右移动或移动到当前位置下方 ...

  6. [luogu2973]driving out the piggies 驱逐猪猡【高斯消元+概率DP】

    看到题面的那一刻,我是绝望的ORZ 图论加概率期望加好像不沾边的高斯消元???我人直接傻掉 还没学过概率期望的我果断向题解屈服了(然后还是傻掉了两节课来找线性方程.. Description 奶牛们建 ...

  7. UVa 10828 Back to Kernighan-Ritchie 高斯消元+概率DP

    题目来源:UVa 10828 Back to Kernighan-Ritchie 题意:从1開始 每次等概率从一个点到和他相邻的点 有向 走到不能走停止 求停止时每一个点的期望 思路:写出方程消元 方 ...

  8. bzoj 2337 高斯消元+概率DP

    题目大意: 每条路径上有一个距离值,从1走到N可以得到一个所有经过路径的异或和,求这个异或和的数学期望 这道题直接去求数学期望的DP会导致很难列出多元方程组 我们可以考虑每一个二进制位从1走到N的平均 ...

  9. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

随机推荐

  1. poj 1298 The Hardest Problem Ever

    题目链接:http://poj.org/problem?id=1298 题目大意:按照所给的顺序要求将输入的字符串进行排列. #include <iostream> #include &l ...

  2. Problems with Ribbon/Feign/Zuul retry

    原文 https://github.com/spring-cloud/spring-cloud-netflix/issues/1577 I'm using Spring Cloud Camden SR ...

  3. js/jq 键盘上下左右回车按键

    js判断上下左右回车按键: document.onkeydown=function(e){ e=window.event||e; switch(e.keyCode){ case 37: //左键 co ...

  4. 從 kernel source code 查出 版本號碼

    kernel/Makefile 1 VERSION = 4 2 PATCHLEVEL = 4 3 SUBLEVEL = 21 4 EXTRAVERSION = 5 NAME = Blurry Fish ...

  5. 虚拟机安装苹果系统 VMware 12安装Mac OS X 10.10

    工具/原料 VMware Workstation Pro 12 (这个可以自己下载,并激活,你懂得) Unlocker 207 (链接:http://pan.baidu.com/s/1i43obDb ...

  6. maven设置打jar包并引入依赖包

    --------------------------------------------------------方法一:将jar包和项目打在一起---------------------------- ...

  7. linux命令(38):traceroute命令

    1.命令格式: traceroute[参数][主机] 2.命令功能: traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置. 具体参数格式:tracer ...

  8. sql中where和having的区别

    “Where” 是一个约束声明,使用Where来约束来自数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. “Having”是一个过滤声明,是在查询返回结果集以后对查询 ...

  9. SGU 202. The Towers of Hanoi Revisited

    多柱汉诺塔问题. 引用自wiki百科 多塔汉诺塔问题 在有3个柱子时,所需步数的公式较简单,但对于4个以上柱子的汉诺塔尚未得到通用公式,但有一递归公式(未得到证明,但目前为止没有找到反例): 令为在有 ...

  10. AC日记——「SCOI2015」小凸玩矩阵 LiBreOJ 2006

    「SCOI2015」小凸玩矩阵 思路: 二分+最大流: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300 ...