概率dp(A - Scout YYF I POJ - 3744 )
题目链接: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 )相关推荐
- 【原创】概率DP总结 by kuangbin
概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...
- POJ 3744:Scout YYF I 概率DP+特征方程+快速幂
Scout YYF I 题目链接: http://poj.org/problem?id=3744 题意: 有个人要到一个叫"mine road"的地方,路线是一条直线,起点在1,路 ...
- poj 3071 Football(概率dp)
http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...
- Collecting Bugs POJ - 2096(基础概率dp+期望模板)
题意: 有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n. 求他找到s个系统的bug,n种bug ...
- poj 1322 Chocolate (概率dp)
///有c种不同颜色的巧克力.一个个的取.当发现有同样的颜色的就吃掉.去了n个后.到最后还剩m个的概率 ///dp[i][j]表示取了i个还剩j个的概率 ///当m+n为奇时,概率为0 # inclu ...
- 关于概率dp的个人理解与总结
原文来自:http://blog.csdn.net/wdcjdtc/article/details/38424029 首先,概率dp主要解决的是关于概率问题和期望问题的求解. 难点和普通dp一样在于d ...
- 【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)
题干: 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如 ...
- 插头DP 概率DP / 期望DP
插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...
- 【POJ3744】Scout YYF I
Description YYF是一个英勇的侦查员.现在他正在执行打入到敌方内部的危险任务.在解决了一系列的险情后,YYF到达了敌方著名的"地雷路"起始点.这条路非常长,上面被精心排 ...
- Check the difficulty of problems (概率dp求概率)
Check the difficulty of problems POJ - 2151 大致题意: m个问题,t个队伍,要求冠军队伍至少解决n个问题,给出每个队伍解决每个问题的概率 求每一个队至少解决 ...
最新文章
- flask使用SQLAlchemy操作mysql
- Tomcat 6 部署工程总结,使用JNDI数据源配置
- win 2003 IIS如何防止代码注入
- HTTP解决设置返回header的code码为400仍然是200的问题
- 三星10年旗舰彻底终结 5年前35次爆炸惊天下
- Linux命令学习笔记之一目录与文件基本操作
- c语言程序设计省考是什么,省考C语言程序设计题附答案..doc
- 历经8年双11流量洗礼,淘宝开放平台架构和技术难点解密
- Java多线程并发编程实践总结
- 全面剖析雅虎助手以及网络实名的流氓行径(1)
- 青少儿科学小实验--鸡蛋立正
- 【游戏客户端】制作节奏大师Like音游(全)
- 核心数据库保护安全技术实践
- 如何在 Mac 上录制屏幕?mac录屏教程分享
- python单元测试mock_Python单元测试mock,获取mocked函数的输入参数
- TensorFlow 2.X获取Flops和参数量(parameters)的方法(2022年)
- 【教程】ECharts饼图记录
- matlabff2函数_罚函数法MATLAB程序.doc
- window10下安装Elasticsearch(es)和IK分词器
- 计算机鼠标不出现在电脑屏幕上,电脑开机屏幕上看不到鼠标箭头?
热门文章
- 软件开发项目各阶段交付物列表
- A40i使用笔记:使用QT调用aplay播放wav音频/混音
- 软件录制电脑扬声器音频的原理
- 礼金记账本安卓_份子钱记账app
- 计算机识别图像的原理,什么是图像识别技术?图像识别技术原理介绍
- 【论文阅读】Tightly Coupled 3D Lidar Inertial Odometry and Mapping
- 用友T1商贸宝批发零售版SQL SERVER数据库恢复
- 计算机怎么改鼠标标志,鼠标指针怎么换,教您如何更换鼠标指针
- 【openGauss 1.1.0测试:全量备份和恢复增量备份和恢复】
- 会员积分消费系统 php,会员消费管理系统充值营销系统会员积分消费系统.net源码...