题目链接

分析&&题意来自 : http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710586.html

题意:

在一条不满地雷的路上,你现在的起点在1处。在N个点处布有地雷,1<=N<=10。地雷点的坐标范围:[1,100000000].
每次前进p的概率前进一步,1-p的概率前进1-p步。问顺利通过这条路的概率。就是不要走到有地雷的地方。

分析:

设dp[i]表示到达i点的概率,则 初始值 dp[1]=1.
很容易想到转移方程: dp[i]=p*dp[i-1]+(1-p)*dp[i-2];
但是由于坐标的范围很大,直接这样求是不行的,而且当中的某些点还存在地雷。
N个有地雷的点的坐标为 x[1],x[2],x[3]```````x[N].
我们把道路分成N段:
1~x[1];
x[1]+1~x[2];
x[2]+1~x[3];
`
`
`
x[N-1]+1~x[N].
这样每一段只有一个地雷。我们只要求得通过每一段的概率。乘法原理相乘就是答案。
对于每一段,通过该段的概率等于1-踩到该段终点的地雷的概率。
就比如第一段 1~x[1].  通过该段其实就相当于是到达x[1]+1点。那么p[x[1]+1]=1-p[x[1]].
但是这个前提是p[1]=1,即起点的概率等于1.对于后面的段我们也是一样的假设,这样就乘起来就是答案了。
对于每一段的概率的求法可以通过矩阵乘法快速求出来。
---------------------------------------------------------------------------------------------------
我用的矩阵| 0 ,1-P |  ,开始的为|1, p|, 乘以这个矩阵x[i] - 1次,就可以得到该点的概率。
              | 1 ,   p |
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <queue>
 6 #include <cmath>
 7 #include <algorithm>
 8 #define LL __int64
 9 const int maxn = 100+10;
10 using namespace std;
11
12 struct node
13 {
14     double m[3][3];
15 };
16
17 node mul(node a, node b) //两个矩阵想乘
18 {
19     int i, j, k;
20     node c;
21     for(i = 0; i < 2; i++)
22     for(j = 0; j < 2; j++)
23     {
24         c.m[i][j] = 0;
25         for(k = 0; k < 2; k++)
26         c.m[i][j] += a.m[i][k]*b.m[k][j];
27     }
28     return c;
29 }
30 node pow_n(node a, int n) //a矩阵乘n次
31 {
32     node c;
33     memset(c.m, 0, sizeof(c.m));
34     for(int i = 0; i < 2; i++) c.m[i][i] = 1;
35
36     while(n)
37     {
38         if(n%2)
39         c = mul(c, a);
40
41         a = mul(a, a);
42         n /= 2;
43     }
44     return c;
45 }
46 int main()
47 {
48     int n, i, x[20], pre;
49     double p, ans;
50     while(~scanf("%d%lf", &n, &p))
51     {
52         node a;
53         ans = 1.0;
54         a.m[0][0] = 0; a.m[0][1] = 1.0-p;
55         a.m[1][0] = 1.0; a.m[1][1] = p;
56         for(i = 0; i < n; i++)
57         scanf("%d", &x[i]);
58         sort(x, x+n);
59
60         pre = 0;
61         for(i = 0; i < n; i++)
62         {
63             node tmp = pow_n(a, x[i]-pre-1);
64             ans *= (1.0-(1.0*tmp.m[0][0]+p*tmp.m[1][0]));
65             pre = x[i];
66         }
67         printf("%.7f\n", ans);
68     }
69     return 0;
70 }

转载于:https://www.cnblogs.com/bfshm/p/4060646.html

poj 3744 Scout YYF I (矩阵快速幂 优化 概率dp)相关推荐

  1. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

    题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...

  2. 【POJ - 3744】Scout YYF I(概率dp,矩阵快速幂优化dp)

    题干: 题目大意: 在一条不满地雷的路上(无限长),你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的可能坐标范围:[1,100000000]. 每次前进p的概率前进一步, ...

  3. 15年第六届蓝桥杯第九题_(矩阵快速幂优化的动态规划)

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

  4. 蓝桥杯 - 垒骰子(动态规划+矩阵快速幂优化)

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

  5. CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)

    CF传送门 洛谷传送门 [题目分析] 在zxy大佬的讲解下终于懂了这道题的做法了qwq... 首先根据题意,出发点不一定在特殊点上,但第一次操作后,之后所有的操作都是在特殊点上,所以先考虑从线上出发的 ...

  6. AtCoder abc256全题解(区间合并模板、矩阵快速幂优化dp、线段树……)

    文章目录 A B C-枚举 D-区间合并模板 E-图论建模,函数图的性质 题意 思路 代码 F-树状数组 题意 思路 代码 G-矩阵快速幂优化dp H-线段树 思路 实现 传送门 本文CSDN 本文j ...

  7. 【noip2016十连测round3】T3 涂色游戏 【矩阵快速幂优化dp】

    涂色游戏 题解: 推一推公式. 我们让f[i][j]表示第i列有j种颜色的方案总数,k表示i-1列用了多少种颜色,l表示第i列用了多少种没有在i-1列出现的颜色,G(i,j)表示i个格子涂j种颜色的方 ...

  8. Q老师度假(变形矩阵快速幂优化DP)

    问题描述 忙碌了一个学期的 Q老师 决定奖励自己 N 天假期. 假期中不同的穿衣方式会有不同的快乐值. 已知 Q老师 一共有 M 件衬衫,且如果昨天穿的是衬衫 A,今天穿的是衬衫 B,则 Q老师 今天 ...

  9. POJ 3744(Scout YYF I )

    题意: 从1开始每次有p的概率往前跳一步,1-p的概率跳两步.给定n个点以及它们的坐标,若跳到这些点上则算失败,求安全经过这些点的概率. 分析:容易推出 dp[i] = dp[i-1]*p +  dp ...

  10. POJ 3744 Scout YYF I 期望dp

    给出n≤10n\leq10n≤10个地雷,它们的位置在[1,1e8][1,1e8][1,1e8]之间.然后一个人从111出发,有PPP的概率走一步,有1−P1-P1−P的概率走两步.求问安全离开的雷区 ...

最新文章

  1. linux怎么进入gnu grub_十项Linux常识,你知道吗?
  2. 硬盘安装WIN7方法
  3. 一次作死尝试:将自己的linux用rm -rf /会怎样?结果哭了。。
  4. mysql 创建、修改、删除表
  5. python基础学习笔记——方法返回值
  6. 关于DNS区域查询,DNS字典爆破,以及查询文件问题
  7. go 学习Printf
  8. centos7ubuntu搭建Vulhub靶场(推荐Ubuntu)
  9. 2021 年 6 月程序员工资统计,反作弊算法工程师太可怕了。。
  10. PostgreSQL 10 自定义并行计算聚合函数的原理与实践
  11. android改变textview文字,如何在Android TextView中更改文本
  12. GdiPlus[34]: IGPGraphicsPath (一)
  13. 智慧交管数字孪生IOC系统
  14. 实不相瞒,我做海外TikTok搬运视频一年的收入,可能是你10年的工资
  15. 区块链治理:用编程迎接未来
  16. Mentor Graphics Calibre 2017.1 Linux 1DVD寄生參數萃取
  17. CSDN新版个人空间介绍之二——个人主页
  18. Vue | 显示切换(v-if与v-show,display,visibility与opacity)
  19. PHP面试技巧——如何应对面试官的“激将法”语言?
  20. JavaScript背景

热门文章

  1. linux中快速拷贝大文件,linux下如何实现快速拷贝大文件
  2. 使用驱动精灵更新无线网卡后出现网卡错误代码56的解决办法
  3. Word使用中常用的快捷键
  4. h2ouve下载 insyde_一种基于InsydeBIOS的BIOS更改方法及系统与流程
  5. 删除python的注册表_python如何清除注册表
  6. IT项目管理流程以及每个步骤用到的文档
  7. VastBase技术实践
  8. mysql pxc gcache_MySQL高可用之PXC
  9. 极速版RPS选股,一秒出结果的方案是如何实现的!股票量化分析工具QTYX-V2.5.3...
  10. 国家开放大学计算机网络技术毕业设计,精编国家开放大学毕业论文:购物网站设计...