http://poj.org/problem?id=3744

题意:在一条铺满地雷的路上,你现在的起点在1处。在N个点处布有地雷,1<=N<=10。地雷点的坐标范围:[1,100000000].
每次前进p的概率前进一步,1-p的概率前进2步。问顺利通过这条路的概率。就是不要走到有地雷的地方。
 
分析:
安全通过就是走到最右的地雷坐标+1 的位置(安全)
有一道显然的转移方程 dp[i] = dp[i-1]*p + dp[i-2]*(1-p) ;   如果有地雷dp[i] 就为0,这样一直的递推下去可是我们发现地雷的坐标真的太大了,递推超时;然后我们在观察这个式子可以发现这是斐波那契数列,可以想到用矩阵快速幂解决 ,但是如果是出现了地雷,dp[i]就会改变,这样就无法使用快速幂。
N个有地雷的点的坐标为 x[1],x[2],x[3]```````x[N].
我们把道路分成N段:
1~x[1];
x[1]+1~x[2];
x[2]+1~x[3];
`
`
`
x[N-1]+1~x[N].
 
这样每一段只有一个地雷。我们只要求得通过每一段的概率。乘法原理相乘就是答案。
对于每一段,通过该段的概率等于1-踩到该段终点的地雷的概率。
 
就比如第一段 1~x[1].  通过该段其实就相当于是到达x[1]+1点。那么p[x[1]+1]=1-p[x[1]].
但是这个前提是p[1]=1,即起点的概率等于1.对于后面的段我们也是一样的假设,这样就乘起来就是答案了。
 (可以理解为我走到那个位置炸了了,那安全的概率肯定是1-不满足的概率啊)
对于每一段的概率的求法可以通过矩阵乘法快速求出来。
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std; typedef long long ll; typedef vector<double>vec;
typedef vector<vec >mat;
int n;
double p,T1,T2,pT1,pT2;
mat mul(mat &A , mat &B)
{
mat C(A.size(),vec(B.size())); for(int i= ; i<A.size() ; i++)
{
for(int k= ; k<B.size() ; k++)
{
if(A[i][k]==) continue;
for(int j= ; j<B[].size() ; j++)
{
if(B[k][j]==) continue;
C[i][j]=(C[i][j] + A[i][k]*B[k][j]);
}
}
}
return C;
}
mat qpow(mat A,ll n)
{
mat B(A.size(),vec(A.size()));
for(int i= ; i<A.size() ; i++)
B[i][i]=;
while(n>)
{
if(n&)
B=mul(B,A);
A=mul(A,A);
n>>=;
}
return B;
}
double so(int len)
{
mat A(,vec());
A[][]=p;A[][]=-p;
A[][]=;A[][]=;
A = qpow(A,len-);
double T=A[][]*p+A[][];
return T;
}
int x[];
bool vis[];
double dp[];
int main()
{
while(~scanf("%d%lf",&n,&p))
{
int Max=-;
for(int i= ; i<=n ; i++)
scanf("%d",&x[i]),vis[x[i]]=,Max=max(Max,x[i]);
dp[]=;
dp[]=p;
if(vis[]) dp[]=;
if(vis[]) dp[]=;
for(int i= ; i<=Max+ ; i++)
{ dp[i]=dp[i-]*p + dp[i-]*(-p);
if(vis[i]) dp[i]=;
}
printf("%0.7f\n",dp[Max+]); }
}

poj3744 (概率DP+矩阵快速幂)的更多相关文章

  1. poj4474 Scout YYF I(概率dp+矩阵快速幂)

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

  2. Scout YYF I POJ - 3744(概率dp + 矩阵快速幂)

    题意: 一条路上有n个地雷,你从1开始走,单位时间内有p的概率走一步,1-p的概率走两步,问安全通过这条路的概率 解析: 很容易想到 dp[i] = p * dp[i-1] + (1 - p) * d ...

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

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

  4. POJ3744 Scout YYF I 概率DP+矩阵快速幂

    http://poj.org/problem?id=3744 题意:一条路,起点为1,有概率p走一步,概率1-p跳过一格(不走中间格的走两步),有n个点不能走,问到达终点(即最后一个坏点后)不踩坏点的 ...

  5. poj 3744 概率dp+矩阵快速幂

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

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

    题意: 一条路上,给出n地雷的位置,人起始位置在1,向前走一步的概率p,走两步的概率1-p,踩到地雷就死了,求安全通过这条路的概率. 分析: 如果不考虑地雷的情况,dp[i],表示到达i位置的概率,d ...

  7. poj 3744 Scout YYF 1 (概率DP+矩阵快速幂)

    F - Scout YYF I Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  8. bnuoj 34985 Elegant String DP+矩阵快速幂

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...

  9. HDU 5434 Peace small elephant 状压dp+矩阵快速幂

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant  Accepts: 38  Submissions: ...

随机推荐

  1. Postman—上个接口返回数据作为下个接口入参

    //将数据解析成json格式 var data=JSON.parse(responseBody); //获取totalRentPrice值 var totalRentPrice=jsonData.da ...

  2. “希希敬敬对”队软件工程第九次作业-beta冲刺第一次随笔

    队名:  “希希敬敬对” 龙江腾(队长) 201810775001 杨希                   201810812008 何敬上 201810812004 今日讨论会议照片一张: 每个人 ...

  3. g50打开无线设置 fn+f7

  4. Sentinel分布式系统的流量防卫兵

    Sentinel 是什么?官网:https://github.com/alibaba/Sentinel/wiki/介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量 ...

  5. dp(买票优惠)

    CodeForces - 1154F There are n shovels in the nearby shop. The i-th shovel costs ai bourles. Misha h ...

  6. yield-Python大牛必须掌握的高端语法

    小白:大牛哥,刚才看到有一个函数不使用return返回结果,而是使用yield关键字返回结果,看不太明白,Python中yield关键字的用途是什么,它有什么作用呀? 大牛: 要想理解yield的作用 ...

  7. 360CTF Re wp

    这比赛唯一的一道Re

  8. ssm框架搭建整合测试

    下载各种jar包 mybatis下载 https://github.com/mybatis/mybatis-3/releases mysql驱动下载 http://mvnrepository.com/ ...

  9. Linux安装postgresql及基础操作

    安装环境说明 系统环境说明 [root@slave1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@sl ...

  10. Python2视频教程

    目录 1. 说明 1.1. 马哥视频_修复v1 1.2. 马哥视频_修复v2 2. 目录 3. 下载链接 1. 说明 Python从入门到精通视频(全60集)马哥教育视频(已修复部分视频无声音的问题+ ...