题意:n个地雷(n<=10)在长度10^8的坐标轴上,yyf从横坐标为1的点开始,每一步有p的概率向右跳一格,(1-p)的概率向右跳两格(不会踩到中间一格),如果踩到地雷他就会死.问活下来的概率.(其实我们的yyf小朋友是被派去滚雷?)
首先考虑一个暴力的DP.记f[i]为活着经过横坐标为i的点的概率,
如果点i处无地雷则f[i]=f[i-1]*p+f[i-2]*(1-p)
如果点i处有地雷则f[i]=0
由此我们知道,如果yyf能活下来,他一定会经过最后一个地雷右边一格的位置t,所以我们要求的就是f[t],但是直接做显然会TLE.
这时候需要我们的一点直觉,就是DP数组在处理较长一段没有地雷的路径时会趋向于一个定值.可以认为离得很远的地雷对DP状态的贡献小到精度范围内可以忽略不计.通过打表观察发现大概500次就可以保证DP数组收敛到一个定值上(下界可能比500更低,因为已经足够通过本题就没有再试)
因此我们对于每一段没有地雷的区间,如果这段区间长度大于500,就把这段区间的长度缩减至500(具体实现时,如果这段区间的长度和500的差值为delta,就把这段区间后面的所有地雷的横坐标都减去delta),这里注意起点和第一个地雷之间的区间也要缩减(RuntimeError一发).然后再DP,区间总长度不会超过5000,稳稳地过了.如果题目中地雷的数目多一些,就可以卡掉这个做法.(如果要卡掉矩乘,需要坐标范围大到取log之后依然超时,不过范围出成那样也比较容易想到是缩减区间长度)
总结:对于有大范围是简单的特殊情况的问题,我们常常可以通过贪心,找规律等方法有效缩减问题规模,例如这道题和noip2005的过河都考虑到较长一段没有障碍物的区间将不会影响答案,还有poj的up and down用到贪心思想抽象出最短路的建图.
另外这道题网上除了漫天的矩阵快速幂,还有一种神奇的数学方法,见http://blog.csdn.net/qq_26572969/article/details/46825971
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
double f[];
int a[];
bool mine[];
int main(){
int n;double p;
while(scanf("%d%lf",&n,&p)!=EOF){
for(int i=;i<=n;++i){
scanf("%d",&a[i]);
}
sort(a+,a+n+);
for(int i=;i<n;++i){
if(a[i+]-a[i]>){
for(int j=n;j>i;--j){
a[j]-=(a[i+]-a[i]-);
}
}
}
memset(f,,sizeof(f));memset(mine,,sizeof(mine));
for(int i=;i<=n;++i)mine[a[i]]=true;
f[]=;
int t=a[n]+;
for(int i=;i<=a[n];++i){
if(!mine[i]){
f[min(i+,t)]+=f[i]*p;f[min(i+,t)]+=f[i]*(-p);
}
}
printf("%.7f\n",f[t]);
}
return ;
}

poj3744 Scout YYF I的更多相关文章

  1. poj3744 Scout YYF I[概率dp+矩阵优化]

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

  2. POJ3744 Scout YYF I (矩阵优化的概率DP)

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

  3. [Poj3744]Scout YYF I (概率dp + 矩阵乘法)

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

  4. [poj3744] Scout YYF I【概率dp 数学期望】

    传送门:http://poj.org/problem?id=3744 令f(i)表示到i,安全的概率.则f(i) = f(i - 1) * p + f(i - 2) * (1 - p),若i位置有地雷 ...

  5. POJ-3744 Scout YYF I 概率DP

    题目链接:http://poj.org/problem?id=3744 简单的概率DP,分段处理,遇到mine特殊处理.f[i]=f[i-1]*p+f[i-2]*(1-p),i!=w+1,w为mine ...

  6. POJ-3744 Scout YYF I (矩阵优化概率DP)

    题目大意:有n颗地雷分布在一条直线上,有个人的起始位置在1,他每次前进1步的概率为p,前进两步的概率为1-p,问他不碰到地雷的概率. 题目分析:定义状态dp(i)表示到了dp(i)的概率,则状态转移方 ...

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

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

  8. POJ 3744 Scout YYF I

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

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

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

随机推荐

  1. 转 FileStream Read File

    FileStream Read File [C#] This example shows how to safely read file using FileStream in C#. To be s ...

  2. velocity模板引擎学习(3)-异常处理

    按上回继续,前面写过一篇Spring MVC下的异常处理.及Spring MVC下的ajax异常处理,今天看下换成velocity模板引擎后,如何处理异常页面: 一.404错误.500错误 <e ...

  3. spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置

    与前面的一篇mybatis 3.2.7 与 spring mvc 3.x.logback整合 相比,只是web层的MVC前端框架,从spring mvc转换成struts 2.x系列,变化并不大 一. ...

  4. opencv4-highgui之视频的输入和输出以及滚动条

    这是<opencv2.4.9tutorial.pdf>的highgui的三个例子.通过简短的介绍来实现不同函数的理解,省去一些不需要说的东西. 一.增加滑动条 这是opencv中为数不多的 ...

  5. Java:注解(元数据)

    初识Java注解 所谓的元数据是指用来描述数据的数据,可能刚听到元数据的时候你会有点陌生,其实任何一个使用过struts或者hibernate的开发人员都在不知不觉中使用元数据,更通俗一点来说元数据是 ...

  6. jsp实现一条横线中间有字的样式

    实现样式: ---------------------------------------------------- xxxxxx ---------------------------------- ...

  7. 项目分享二:APP 小红点中数字的处理

    小红点,是 APP 中最常见的一个功能,我们先来看一下面的案例,下图中,待评价的商品有 2 个,点击“评价晒单”按钮进行评价后,那么待评价数量应该变成 1,那么这个功能是如何去实现的呢? 一般来说,实 ...

  8. Resharper快捷键

    建议你使用 Reshaper 的快捷键,不要担心 Reshaper 会把你原来的快捷键设置给覆盖了,因为如果某个快捷键和 VS 是冲突的,Reshaper会让你自己选择需要使用 VS 还是 Resha ...

  9. 边界网关协议BGP

    Border Gateway Protocol (BGP) is a standardized exterior gateway protocol designed to exchange routi ...

  10. JavaScript学习笔记-循环输出菱形,并可菱形自定义大小

    var Cen = 6;//定义菱形中部为第几行(起始值为0) //for循环输出菱形 document.write("<button onclick='xh()'>点我for循 ...