题意: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. java中wait/notify机制

    通常,多线程之间需要协调工作.例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕.如果图片还没有下载完,d ...

  2. 李学斌:论复杂系统中的应用间协作V3

    说明 本文主要讨论了巨型复杂业务系统的一种构建思路,力图实现决策意志的快速.准确.一致的下传并简化实施成本提供实施效率.通过全业务领域的即时流程编排,实现全网业务IT系统的快速建设与迭代.本文所讲的方 ...

  3. lodop打印控件一点记录

    今天初步接触了下打印控件 LODOP实现了自动分页,高度宽度都可以自己设定来分页. 页码,使用LODOP.SET_PRINT_STYLE("ItemType", 2); LODOP ...

  4. struts2 DMI

    在使用DMI(动态方法调用)的时候要注意struts.xml配置时要把 <constant name="struts.enable.DynamicMethodInvocation&qu ...

  5. 对《重建中国.NET生态系统》评论贴的总结

    Neuzilla官方微信公众号:搜 架构师联盟 或 neuzilla,也可以扫下面二维码 在看了<重建中国.NET生态系统>的各种哭爹喊娘骂街的评论之后,我觉得哦,淫才确实很多,但是么真正 ...

  6. Kafka笔记

    最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下. kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列.它主要由三个部分组成,prod ...

  7. Redis Sentinel:集群Failover解决方案(转载)

    本文转载自:http://shift-alt-ctrl.iteye.com/blog/1884370 文中的配置例子,还有failover过程中触发的订阅事件具有很好的参考价值. Redis sent ...

  8. 2016 5.03开始记录我的it学习。

    好多谢立成师兄给我这个网址,我发现博客园不仅仅可以随笔记载很多东西,还是一个资源丰富的网站,接下来的四年我会用心去记录这些学习的点滴.

  9. Matlab生成M序列的伪随机码

    伪随机编码中较常用的是m序列,它是线性反馈移位寄存器序列的一种,其特点是在相同寄存器级数的情况下输出序列周期最长.线性反馈移位寄存器的工作原理是,给定所有寄存器一个初始值,当移位脉冲到来时,将最后一级 ...

  10. LaTeX常用数学符号表示方法

    转自:http://www.mohu.org/info/symbols/symbols.htm 常用数学符号的 LaTeX 表示方法 (以下内容主要摘自“一份不太简短的 LATEX2e 介绍”) 1. ...