题目

题意: $ yyf $ 一开始在 $ 1 $ 号节点他要通过一条有 $ n $ 个地雷的道路,每次前进他有 $ p $ 的概率前进一步,有 $ 1-p $ 的概率前进两步,问他不领盒饭的概率。

对于这道题我们可以考虑 $ dp $ ,我们可以设计状态 $ f[i] $ 表示安全通过 $ i $的概率,那么我们可以得到状态转移方程

$ f[i]=p* f[i-1]+(1-p)* f[i-2] $

$ f[x_i]=0 $

然后我们可以看到 $ x \in [1, 100000000] $如果我们直接 $ dp $ 很明显会超时那么怎么办呢?我们可以去考虑进行分段 $ dp $ 。我们可以观察发现在你到一个地雷前,这其中的概率只与这个地雷有关就可以把区间进行缩小然后 $ dp $

$ a[1],a[2],a[3]......a[x[1]] $

$ a[x[1]+1],a[x[1]+2],a[x[1]+3]......a[x[2]] $

$ .......... $

$ a[x[n-1]+1],a[x[n-1]+2],a[x[n-1]+3]......a[x[n]] $

然后我们看到这个状态转移方程

$ f[i]=p* f[i-1]+(1-p)* f[i-2] $

是不是很像

$ f[i]=f[i-1]+ f[i-2] $

就可以看作斐波那契数列加了个参数可以使用矩阵加速(对于这个网上有很多题解,这里就不讲这个讲下别的)

我们可以利用这个式子的特征方程进行求解(关于这一类方程

首先我们可以写出它的特征方程 $ x^2=px+* (1-p) $

移项后得 $ x^2-px+p-1=0 $

利用求根公式得到两个不同的可行解 $ x_1=p-1 \ \ \ \ x_2= 1 $

就可以写出通项公式 $ f(n)=c_1x_1n+c_2x_2n $

即 $ f(n)=c_1* 1^n +c_2 * (p-1)^n $

然后我们可以将 $ f(1)=1,f(2)=p $ 带入可以知道 $ c_1=\frac{1}{2-p} \ \ \ c_2=\frac{1}{p-2} $

最后的通项公式就是 $ f(n)=\frac{1-(p-1)^n}{2-p} $

最后用快速幂求出 $ 1-(p-1)^n $ 即可

代码

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,x[30];
double p,ans;
double power(int y){
double tmp=1;double x=p-1.0;//注意类型
while(y){
if(y&1) tmp*=x;
x*=x;
y>>=1;
}
return tmp;
}
int main(){
while(scanf("%d %lf",&n,&p)!=EOF){
for(int i=1;i<=n;++i) scanf("%d",&x[i]);
ans=1;x[0]=0;
sort(x+1,x+1+n);//原来的地雷不一定有序
for(int i=1;i<=n;++i){
int tmp=x[i]-x[i-1]-1;//走到地雷前
ans*=((1.0-power(tmp))/(2.0-p));
if(fabs(ans)<1e-8) break;//为0直接退出
ans*=(1.0-p);//跳过地雷,走两步
}
printf("%.7lf\n",ans);
}
return 0;
}

poj 3744 题解的更多相关文章

  1. poj 3744 Scout YYF I(递推求期望)

    poj 3744 Scout YYF I(递推求期望) 题链 题意:给出n个坑,一个人可能以p的概率一步一步地走,或者以1-p的概率跳过前面一步,问这个人安全通过的概率 解法: 递推式: 对于每个坑, ...

  2. 矩阵快速幂+概率DP poj 3744

    题意:在一条不满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...

  3. POJ 3744 Scout YYF I 概率dp+矩阵快速幂

    题目链接: http://poj.org/problem?id=3744 Scout YYF I Time Limit: 1000MSMemory Limit: 65536K 问题描述 YYF is ...

  4. POJ 3744 Scout YYF I:概率dp

    题目链接:http://poj.org/problem?id=3744 题意: 有n个地雷,位置为pos[i]. 在每个位置,你向前走一步的概率为p,向前走两步的概率为1-p. 你的初始位置为1. 问 ...

  5. poj 3744 Scout (Another) YYF I - 概率与期望 - 动态规划 - 矩阵快速幂

      (Another) YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...

  6. POJ 3744 Scout YYF I(矩阵快速幂优化+概率dp)

    http://poj.org/problem?id=3744 题意: 现在有个屌丝要穿越一个雷区,雷分布在一条直线上,但是分布的范围很大,现在这个屌丝从1出发,p的概率往前走1步,1-p的概率往前走2 ...

  7. 【POJ 3744】 Scout YYF I

    [题目链接] http://poj.org/problem?id=3744 [算法] 概率DP + 矩阵乘法 [代码] #include <algorithm> #include < ...

  8. POJ 3744 Scout YYF I

    分段的概率DP+矩阵快速幂                        Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  9. Scout YYF I(POJ 3744)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5565   Accepted: 1553 Descr ...

随机推荐

  1. LeetCode 1039. Minimum Score Triangulation of Polygon

    原题链接在这里:https://leetcode.com/problems/minimum-score-triangulation-of-polygon/ 题目: Given N, consider ...

  2. oracle 按每天,每周,每月,每季度,每年查询统计数据

    oracle 按每天,每周,每月,每季度,每年查询统计数据 //按天统计 select count(dataid) as 每天操作数量, sum() from tablename group by t ...

  3. S1_搭建分布式OpenStack集群_11 虚拟机创建

    一.创建网络环境环境变量生效一下创建一个网络:# openstack network create --share --external \--provider-physical-network ph ...

  4. 洛谷 P1432 倒水问题

    目录 题目 思路 \(Code\) 题目 戳 思路 \(bfs\) 第一遍提交\(50\),第二遍就\(100\)了,qwq \(Code\) #include<iostream> #in ...

  5. GoCN每日新闻(2019-10-06)

    GoCN每日新闻(2019-10-06) 国庆专辑:GopherChina祝大家国庆节快乐 GoCN每日新闻(2019-10-06) 1. Go 1.14 有什么新变化 http://docs.goo ...

  6. JavaScript操作BOM

    window对象的属性: history: 方法: back() 加载 history 对象列表中的前一个URL forward() 加载 history 对象列表中的下一个URL go() 加载 h ...

  7. 2019软工实践_Alpha(4/6)

    队名:955 组长博客:https://www.cnblogs.com/cclong/p/11882079.html 作业博客:https://edu.cnblogs.com/campus/fzu/S ...

  8. 【软工实践】Beta版本演示

    团队信息 队名:女生都队 组长博客: 博客链接 成员 学号 史恩泽(组长) 031702122 施金海 031702121 阮君曦 031702116 陈银山 031702137 李季城 031702 ...

  9. uploadifive 1.1.2 动态传参

    之前用过Flash版本的uploadify,写过一篇关于uploadify动态传参的文章(点击打开链接).后来有了HTML5版本的上传控件,叫uploadifive,测试着用了一下,效果还不错.这里主 ...

  10. mysql中的递归

    别人问的一个需求:   数据库里面保存的是父子关系结构: 展示出来的需要根据子类一直查到顶类后将名称全部放一个字段里面,如下:  比如输入的code是1099,名称要显示 配料/花椒/ces     ...