poj 3744 题解
题意: $ 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 题解的更多相关文章
- poj 3744 Scout YYF I(递推求期望)
poj 3744 Scout YYF I(递推求期望) 题链 题意:给出n个坑,一个人可能以p的概率一步一步地走,或者以1-p的概率跳过前面一步,问这个人安全通过的概率 解法: 递推式: 对于每个坑, ...
- 矩阵快速幂+概率DP poj 3744
题意:在一条不满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...
- POJ 3744 Scout YYF I 概率dp+矩阵快速幂
题目链接: http://poj.org/problem?id=3744 Scout YYF I Time Limit: 1000MSMemory Limit: 65536K 问题描述 YYF is ...
- POJ 3744 Scout YYF I:概率dp
题目链接:http://poj.org/problem?id=3744 题意: 有n个地雷,位置为pos[i]. 在每个位置,你向前走一步的概率为p,向前走两步的概率为1-p. 你的初始位置为1. 问 ...
- 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 ...
- POJ 3744 Scout YYF I(矩阵快速幂优化+概率dp)
http://poj.org/problem?id=3744 题意: 现在有个屌丝要穿越一个雷区,雷分布在一条直线上,但是分布的范围很大,现在这个屌丝从1出发,p的概率往前走1步,1-p的概率往前走2 ...
- 【POJ 3744】 Scout YYF I
[题目链接] http://poj.org/problem?id=3744 [算法] 概率DP + 矩阵乘法 [代码] #include <algorithm> #include < ...
- POJ 3744 Scout YYF I
分段的概率DP+矩阵快速幂 Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- Scout YYF I(POJ 3744)
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5565 Accepted: 1553 Descr ...
随机推荐
- 使用docker来创建一个etcd集群
docker run -d --name etcd1 --network etcdnet --ip 172.25.0.101 -p 23791:2379 -e ETCDCTL_API=3 -v /ro ...
- know thself
- 认识Dump文件
一.什么是Dump文件 又叫内存转储文件或者叫内存快照文件.是一个进程或系统在某一给定的时间的快照.比如在进程崩溃时或则进程有其他问题时,甚至是任何时候,我们都可以通过工具将系统或某进程的内存备份出来 ...
- 11-ESP8266 SDK开发基础入门篇--软硬件定时器
https://www.cnblogs.com/yangfengwu/p/11094009.html 定时器有两种,软件定时器和硬件定时器 软件定时器就是靠里面的任务延时实现的,,这样的定时器其实延时 ...
- 手动停止jquery ajax请求
主要调用jquery提供的ajax abort方法,详细代码如下: <html> <head> <meta charset="UTF-8"> & ...
- CDH 版本 6.0.1 升级到 6.2.0 当前最新版本(CentOS 7.x)
前文「CDH CM版本 6.0.1 升级到 CM 6.2.0 当前最新版本(CentOS 7.x)」 承接上文,当我们完成 CM 6.2.0 的升级之后,我们已经相当于完成了80% minor 的升级 ...
- 忘记zip密码咋办?python在手密码我有
整理资料时发现几个 zip 文件的密码忘记了,于是尝试用python暴力破解 首先是读取和解压zip文件,使用 zipfile 库 import zipfile z = zipfile.ZipFile ...
- [代码质量] 代码质量管控 -- 复杂度检测 (JavaScript)
转载自: https://juejin.im/post/59bb8b546fb9a00a4247532e 背景 代码的复杂度是评估一个项目的重要标准之一.较低的复杂度既能减少项目的维护成本,又能避免一 ...
- 并发下sftp连接报错——com.jcraft.jsch.JSchException: connection is closed by foreign host
当对单接口极限测试时,随着并发量上升,接口稳定性出现不稳定的情况,排查后台日志,发现报错在该接口调用sftp上传时出现问题(确切的是在初始化连接时失败) 原因:系统SSH终端连接数配置过小,查看虚拟机 ...
- 小数末尾是0的,不显示0,有值才显示 StringFormat
JAVA public static void main(String[] args) { DecimalFormat df = new DecimalFormat("###.##" ...