题目链接: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代码:

 #include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
# define ll long long
const int maxn =+;
int sto[maxn];
struct Matrix
{
double a[][];
} tmp;
Matrix cal(Matrix t1,Matrix t2){
Matrix t;
for(int i=; i<=; i++)
{
for(int j=; j<=; j++)
{
t.a[i][j]=;
for(int k=; k<=; k++)
{
t.a[i][j]+=t1.a[i][k]*t2.a[k][j];
}
}
}
return t;
}
Matrix quickpow(Matrix t,int ti)
{
Matrix tt;
if(ti==)//如果有连着的两个雷,这个时候逃出去的概率是0,因为我们计算的时候是取第一个,然后这个时候ans就变成0了,
{
tt.a[][]=;
}
else
{
tt=t;
ti--;
while(ti)
{
if(ti&)
tt=cal(tt,t);
t=cal(t,t);
ti>>=;
}
}
return tt;
}
int main()
{
int n;
double p;
while(~scanf("%d %lf",&n,&p))
{
for(int i=; i<=n; i++)
{
scanf("%d",&sto[i]);
}
sort(sto+,sto+n+);
double ans=;
tmp.a[][]=p;
tmp.a[][]=;
tmp.a[][]=-p;
tmp.a[][]=;
Matrix t;
t=quickpow(tmp,sto[]-);
ans=ans*(-t.a[][]);
for(int i=; i<=n; i++)
{
t=quickpow(tmp,sto[i]-(sto[i-]+));
ans=ans*(-t.a[][]);
}
printf("%.7lf\n",ans);
}
return ;
}

概率dp(A - Scout YYF I POJ - 3744 )的更多相关文章

  1. Scout YYF I POJ - 3744(概率dp)

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

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

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

  3. Scout YYF I POJ - 3744【矩阵乘法优化求概率】

    题意: 一条路上有 $n$ 个地雷,YYF 从位置 $1$ 出发,走一步的概率为 $p$,走两步的概率是 $(1-p)$.求 YYF 能顺利通过这条路的概率. 数据范围: $1\leq n \leq ...

  4. Scout YYF I POJ - 3744(矩阵优化)

    题意:一条路上有n个地雷,给出地雷的位置.某人从起点(位置1)出发,走一步的概率是p,走两步的概率是(1-p),然后问有多少概率走过这个雷区. 思路: 只要走过最后一个地雷就代表走过雷区了. 而每到 ...

  5. [转]概率DP总结 by kuangbin

    概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...

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

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

  7. poj 3744 Scout YYF I(概率dp,矩阵优化)

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

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

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

  9. POJ 3744 Scout YYF I

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

随机推荐

  1. PAT甲题题解-1008. Elevator (20)-大么个大水题,这也太小瞧我们做题者的智商了

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <cstr ...

  2. 《在kali上完成gdb调试》

    kali使用流程 1.使menuos停止 方法如图: 效果如图: 2.启动调试 打开一个新的命令行,然后方法如下图: 3.设置断点 注:由图可看出,断点设置在sys_clone,dup_task_st ...

  3. 重温jsp①

    Jsp就是一个servlet servlet的缺点 不适合设置html响应体,需要response.Getwriter.print(); 优点:动态资源,可以编程. Jsp:在原有的html中加入了J ...

  4. idea 使用教程

    最智能的IDE IDEA相对于eclipse来说最大的优点就是它比eclipse聪明.聪明到什么程度呢?我们先来看几个简单的例子. 智能提示重构代码 如果你写的代码过于复杂,或者有更好的方式来替代你写 ...

  5. C#程序解读

    阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...

  6. 第十周PSP&进度条

    PSP 一.表格: D日期     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 11月17号 站立会议 分配任务 13:00 13:30 0 3 ...

  7. Redis分布式锁的实现

    前段时间,我在的项目组准备做一个类似美团外卖的拼手气红包[第X个领取的人红包最大],基本功能实现后,就要考虑这一操作在短时间内多个用户争抢同一资源的并发问题了,类似于很多应用如淘宝.京东的秒杀活动场景 ...

  8. poj1741 Tree(点分治)

    题目链接:http://poj.org/problem?id=1741 题意:求树上两点之间距离小于等于k的点对的数量 思路:点分治模板题,推荐一篇讲的非常好的博客:https://blog.csdn ...

  9. Python Django性能测试与优化指南

    摘要:本文通过一个简单的实例一步一步引导读者对其进行全方位的性能优化.以下是译文. 唐纳德·克努特(Donald Knuth)曾经说过:“不成熟的优化方案是万恶之源.”然而,任何一个承受高负载的成熟项 ...

  10. NOIP2018TG 初赛复习

    Date: 20180911 TCP/IP OSI7面向对象的程序设计语言 1.不是自顶向下2.simula 67语言 第一个3.继承性.封装性.多态性NOIP支持的语言环境:对于c / c++ :D ...