题目链接:https://cn.vjudge.net/contest/276241#problem/A

题目大意:首先输入n和p,n代表地雷的个数,p代表走一步的概率,1-p代表走两步的概率,然后问你这个人安全走出雷区的概率

具体思路:我们可以很容易的推出递式,dp[i] = dp[i-1]*p+dp[i-1]*(1-p).但是这样线性过去的话,肯定会超时,所以我们可以借助矩阵加速,假设输入的地雷个数是n个,sto[1],sto[2],sto[3]...我们把1-sto[1]看成一段,sto[1]+1~sto[2]看成一段,这样一直循环下去就可以了,最终计算结果的时候,我们把每一段的概率相乘就可以了。相乘的时候注意,当前的a[1][1]这个矩阵代表的是正好走到这个雷点的概率,但是我们需要计算的是跳过这个雷点的概率,所以这一段的概率应该是(1-a[1][1])。每一段的第一个概率都是1,因为一定需要从这个点出发。

AC代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 using namespace std;
 5 # define ll long long
 6 const int maxn =10+10;
 7 int sto[maxn];
 8 struct Matrix
 9 {
10     double a[4][4];
11 } tmp;
12 Matrix cal(Matrix t1,Matrix t2){
13     Matrix t;
14     for(int i=1; i<=2; i++)
15     {
16         for(int j=1; j<=2; j++)
17         {
18             t.a[i][j]=0;
19             for(int k=1; k<=2; k++)
20             {
21                 t.a[i][j]+=t1.a[i][k]*t2.a[k][j];
22             }
23         }
24     }
25     return t;
26 }
27 Matrix quickpow(Matrix t,int ti)
28 {
29     Matrix tt;
30     if(ti==0)//如果有连着的两个雷,这个时候逃出去的概率是0,因为我们计算的时候是取第一个,然后这个时候ans就变成0了,
31     {
32         tt.a[1][1]=1;
33     }
34     else
35     {
36         tt=t;
37         ti--;
38         while(ti)
39         {
40             if(ti&1)
41                 tt=cal(tt,t);
42             t=cal(t,t);
43             ti>>=1;
44         }
45     }
46     return tt;
47 }
48 int main()
49 {
50     int n;
51     double p;
52     while(~scanf("%d %lf",&n,&p))
53     {
54         for(int i=1; i<=n; i++)
55         {
56             scanf("%d",&sto[i]);
57         }
58         sort(sto+1,sto+n+1);
59         double ans=1;
60         tmp.a[1][1]=p;
61         tmp.a[1][2]=1;
62         tmp.a[2][1]=1-p;
63         tmp.a[2][2]=0;
64         Matrix t;
65         t=quickpow(tmp,sto[1]-1);
66         ans=ans*(1-t.a[1][1]);
67         for(int i=2; i<=n; i++)
68         {
69             t=quickpow(tmp,sto[i]-(sto[i-1]+1));
70             ans=ans*(1-t.a[1][1]);
71         }
72         printf("%.7lf\n",ans);
73     }
74     return 0;
75 }

转载于:https://www.cnblogs.com/letlifestop/p/10264227.html

概率dp(A - Scout YYF I POJ - 3744 )相关推荐

  1. 【原创】概率DP总结 by kuangbin

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...

  2. POJ 3744:Scout YYF I 概率DP+特征方程+快速幂

    Scout YYF I 题目链接: http://poj.org/problem?id=3744 题意: 有个人要到一个叫"mine road"的地方,路线是一条直线,起点在1,路 ...

  3. poj 3071 Football(概率dp)

    http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...

  4. Collecting Bugs POJ - 2096(基础概率dp+期望模板)

    题意: 有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n. 求他找到s个系统的bug,n种bug ...

  5. poj 1322 Chocolate (概率dp)

    ///有c种不同颜色的巧克力.一个个的取.当发现有同样的颜色的就吃掉.去了n个后.到最后还剩m个的概率 ///dp[i][j]表示取了i个还剩j个的概率 ///当m+n为奇时,概率为0 # inclu ...

  6. 关于概率dp的个人理解与总结

    原文来自:http://blog.csdn.net/wdcjdtc/article/details/38424029 首先,概率dp主要解决的是关于概率问题和期望问题的求解. 难点和普通dp一样在于d ...

  7. 【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)

    题干: 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如 ...

  8. 插头DP 概率DP / 期望DP

    插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...

  9. 【POJ3744】Scout YYF I

    Description YYF是一个英勇的侦查员.现在他正在执行打入到敌方内部的危险任务.在解决了一系列的险情后,YYF到达了敌方著名的"地雷路"起始点.这条路非常长,上面被精心排 ...

  10. Check the difficulty of problems (概率dp求概率)

    Check the difficulty of problems POJ - 2151 大致题意: m个问题,t个队伍,要求冠军队伍至少解决n个问题,给出每个队伍解决每个问题的概率 求每一个队至少解决 ...

最新文章

  1. flask使用SQLAlchemy操作mysql
  2. Tomcat 6 部署工程总结,使用JNDI数据源配置
  3. win 2003 IIS如何防止代码注入
  4. HTTP解决设置返回header的code码为400仍然是200的问题
  5. 三星10年旗舰彻底终结 5年前35次爆炸惊天下
  6. Linux命令学习笔记之一目录与文件基本操作
  7. c语言程序设计省考是什么,省考C语言程序设计题附答案..doc
  8. 历经8年双11流量洗礼,淘宝开放平台架构和技术难点解密
  9. Java多线程并发编程实践总结
  10. 全面剖析雅虎助手以及网络实名的流氓行径(1)
  11. 青少儿科学小实验--鸡蛋立正
  12. 【游戏客户端】制作节奏大师Like音游(全)
  13. 核心数据库保护安全技术实践
  14. 如何在 Mac 上录制屏幕?mac录屏教程分享
  15. python单元测试mock_Python单元测试mock,获取mocked函数的输入参数
  16. TensorFlow 2.X获取Flops和参数量(parameters)的方法(2022年)
  17. 【教程】ECharts饼图记录
  18. matlabff2函数_罚函数法MATLAB程序.doc
  19. window10下安装Elasticsearch(es)和IK分词器
  20. 计算机鼠标不出现在电脑屏幕上,电脑开机屏幕上看不到鼠标箭头?

热门文章

  1. 软件开发项目各阶段交付物列表
  2. A40i使用笔记:使用QT调用aplay播放wav音频/混音
  3. 软件录制电脑扬声器音频的原理
  4. 礼金记账本安卓_份子钱记账app
  5. 计算机识别图像的原理,什么是图像识别技术?图像识别技术原理介绍
  6. 【论文阅读】Tightly Coupled 3D Lidar Inertial Odometry and Mapping
  7. 用友T1商贸宝批发零售版SQL SERVER数据库恢复
  8. 计算机怎么改鼠标标志,鼠标指针怎么换,教您如何更换鼠标指针
  9. 【openGauss 1.1.0测试:全量备份和恢复增量备份和恢复】
  10. 会员积分消费系统 php,会员消费管理系统充值营销系统会员积分消费系统.net源码...