poj 3744 矩阵快速幂+概率dp
题目大意:
输入n,代表一位童子兵要穿过一条路,路上有些地方放着n个地雷(1<=n<=10)。再输入p,代表这位童子兵非常好玩,走路一蹦一跳的。每次他在 i 位置有 p 的概率走一步到 i+1 ,或者 (1-p) 的概率跳一步到 i+2。输入n个数,代表n个地雷的位置(1<=n<=100000000),童子兵初始在1位置,求他安全通过这条道路的概率。
基本思路:
如果k 号位有雷,那么安全通过这个雷只可能是在 k-1 号位选择走两步到 k+1 号位。因此,可以得到如下结论:在第 i 个雷的被处理掉的概率就是从 a[i-1]+1 号位到 a[i] 号位的概率。于是,可以用 1 减去就可以求出安全通过第 i个雷的概率,最后乘起来即可,比较悲剧的是数据很大,所以需要用到矩阵快速幂……
类似斐波那契数列,有ans[i]=p*ans[i-1]+(1-p)*ans[i-2] ,构造矩阵为
代码如下:
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- typedef long long ll;
- const int inf = 0x3f3f3f3f;
- const int maxn = 100000+10;
- double f[3][3],base[3][3],tmp[3][3];
- double b[3],c[3];
- int n,pos[20];
- double p;
- double solve(int t){
- base[0][0]=p;
- base[0][1]=1.0-p;
- base[1][0]=1;
- base[1][1]=0;
- f[0][0]=1;
- f[0][1]=0;
- f[1][0]=0;
- f[1][1]=1;
- b[0]=1;
- b[1]=0;
- while(t){
- if(t&1){
- for(int i=0;i<2;i++){
- for(int j=0;j<2;j++){
- tmp[i][j]=0;
- for(int k=0;k<2;k++){
- tmp[i][j]+=f[i][k]*base[k][j];
- }
- }
- }
- for(int i=0;i<2;i++){
- for(int j=0;j<2;j++){
- f[i][j]=tmp[i][j];
- }
- }
- }
- for(int i=0;i<2;i++){
- for(int j=0;j<2;j++){
- tmp[i][j]=0;
- for(int k=0;k<2;k++){
- tmp[i][j]+=base[i][k]*base[k][j];
- }
- }
- }
- for(int i=0;i<2;i++){
- for(int j=0;j<2;j++){
- base[i][j]=tmp[i][j];
- }
- }
- t>>=1;
- }
- for(int i=0;i<2;i++){
- c[i]=0;
- for(int j=0;j<2;j++){
- c[i]+=f[i][j]*b[j];
- }
- }
- return c[0];
- }
- int main(){
- while(~scanf("%d%lf",&n,&p)){
- for(int i=1;i<=n;i++){
- scanf("%d",&pos[i]);
- }
- pos[0]=0;
- sort(pos,pos+n+1);
- double ans=1.0;
- for(int i=1;i<=n;i++){
- ans=ans*(1.0-solve(pos[i]-pos[i-1]-1));
- }
- printf("%.7lf\n",ans);
- }
- return 0;
- }
poj 3744 矩阵快速幂+概率dp的更多相关文章
- 刷题总结—— Scout YYF I(poj3744 矩阵快速幂+概率dp)
题目: Description YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate int ...
- 矩阵快速幂+概率DP poj 3744
题意:在一条不满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...
- 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)
传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...
- POJ 3744 Scout YYF I 概率dp+矩阵快速幂
题目链接: http://poj.org/problem?id=3744 Scout YYF I Time Limit: 1000MSMemory Limit: 65536K 问题描述 YYF is ...
- POJ 2778 DNA Sequence ( AC自动机、Trie图、矩阵快速幂、DP )
题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩 ...
- BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)
考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i ...
- 【矩阵快速幂优化DP】【校内测试】
实际上是水水题叻,先把朴素DP方程写出来,发现$dp[i]$实际上是$dp[i-k]-dp[i-1]$的和,而看数据范围,我们实际上是要快速地求得这段的和,突然就意识到是矩阵快速幂叻. 构建矩阵什么的 ...
- LOJ2325. 「清华集训 2017」小 Y 和恐怖的奴隶主【矩阵快速幂优化DP】【倍增优化】
LINK 思路 首先是考虑怎么设计dp的状态 发现奴隶主的顺序没有影响,只有生命和个数有影响,所以就可以把每个生命值的奴隶主有多少压缩成状态就可以了 然后发现无论是什么时候一个状态到另一个状态的转移都 ...
- HDU5411——CRB and Puzzle——————【矩阵快速幂优化dp】
CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
随机推荐
- jQuery JCrop插件的使用详解
jQuery的一个图片剪切的一个插件, 使用插件必须条件:引入jQuery.js文件,引入jQuery.Jcrop.js文件,引入JQuery.Jcrop.css文件 1.最基本的使用方法: &l ...
- win10 + VS2015 编译 ARPACK
step 1: 下载ARPACK , mingw-w64-install 和 mingw-get-inst-20120426.exe: step 2: 安装 MinGW-64默认安装路径即可. ste ...
- hdu4857 拓扑排序
题目大意: 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前. 同时,社会是不平等的,这些 ...
- 【软工项目Beta阶段】绝不划水队OUC-Market版本测试报告
我们在开发APP的时候进行了软件的测试,同时发现了一些BUG,如下: bug 我的:与各种页面之间的交互不灵活 登录与注册:记住密码功能不完善 商场主界面:搜索功能还没有完善 收藏功能:与数据库的交互 ...
- SQL必知必会——插入数据(十五)
1.数据插入 INSERT用来将行插入(或添加)到数据库表.插入有几种方式: 插入完整的行插入行的一些部分插入某些查询的结果注意:1.使用INSERT语句可能需要客户端/服务端DBMS中的特定安全权限 ...
- linux(centos6) 常用操作
目录 一.开机关机 1.Linux centos重启命令: 2.Linux centos关机命令: 二.图形界面与命令界面的切换 1.修改/etc/inittab文件,文件中,最后一行id:5:ini ...
- python如何读写EXCEL文档 (有助于自动化的参数化,用的方法是XLRD,XLWT)
读EXCEL: import xlrd 例1, data=xlrd.open("E:\egg.xls") # 打开xls文件 table=data.sheets()[0] ...
- CentOS 7 & php7.2安装 php-redis 扩展
CentOS 7 & php7.2安装 php-redis 扩展 1.下载phpredis-developcd /tmpwget https://codeload.github.com/php ...
- [STemWin教程入门篇]第二期:emWin5.xx的详细移植步骤
转自:http://bbs.armfly.com/read.php?tid=1545 重要说明:(0)由于这个移植教程是去年过年的时候做的,用的是5.16,这就不再做个5.20的移植了,方法是一样的. ...
- Redis Cluster 设置密码
两种方式 1.修改配置文件 在每个节点的配置文件里面增加密码选项,一定要加上 masterauth,不然 Redirected 的时候会失败. masterauth redispassword req ...