poj3744 Scout YYF I
题意: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的更多相关文章
- poj3744 Scout YYF I[概率dp+矩阵优化]
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8598 Accepted: 2521 Descr ...
- 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 ...
- [Poj3744]Scout YYF I (概率dp + 矩阵乘法)
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9552 Accepted: 2793 Descr ...
- [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位置有地雷 ...
- 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 ...
- POJ-3744 Scout YYF I (矩阵优化概率DP)
题目大意:有n颗地雷分布在一条直线上,有个人的起始位置在1,他每次前进1步的概率为p,前进两步的概率为1-p,问他不碰到地雷的概率. 题目分析:定义状态dp(i)表示到了dp(i)的概率,则状态转移方 ...
- POJ3744 Scout YYF I 概率DP+矩阵快速幂
http://poj.org/problem?id=3744 题意:一条路,起点为1,有概率p走一步,概率1-p跳过一格(不走中间格的走两步),有n个点不能走,问到达终点(即最后一个坏点后)不踩坏点的 ...
- POJ 3744 Scout YYF I
分段的概率DP+矩阵快速幂 Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- poj 3744 Scout YYF I(概率dp,矩阵优化)
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5020 Accepted: 1355 Descr ...
随机推荐
- NOI2018准备Day1
今天刷基础题,字符串实在不想刷,做了20到多维数组题.老师说要10分钟一道,然而我加上整理差不多半小时一道吧... 总感觉自己效率比别人低了好多好多好多倍. 基础不牢,地动山摇,最近还是好好稳固基础题 ...
- mac系统上使用压缩包版的mysql(非安装版)
mac本换了块固态硬盘,一切重新装过,mysql嫌官网下载太慢,直接百度 "mysql mac",第一个就是: 不料下载完后,发现这是一个压缩包版,并没有安装程序.网上搜索了一下, ...
- Java 集合与队列的插入、删除在并发下的性能比较
这两天在写一个java多线程的爬虫,以广度优先爬取网页,设置两个缓存: 一个保存已经访问过的URL:vistedUrls 一个保存没有访问过的URL:unVistedUrls 需要爬取的数据量不大,对 ...
- 探究JVM——垃圾回收
垃圾回收主要考虑三件事情:哪些内存需要回收?什么时候回收?如何回收? 一.哪些内存需要回收? 堆内存:对于JVM 来说,垃圾回收主要是针对堆内存中的对象实例. 方法区:垃圾收集行为在方法区是比较少出现 ...
- 2014 todo list
1. 做好已知的各种项目,争取能成立固定团队2. 横向扩展技术学习,了解各种技术,加强技术素养3. 争取找个妹子4. 加强音律学习5. 继续发展各业余爱好6. 努力摇号 年底看收成.
- 深入浅出ASP.NET MVC5系列之一
前言 为避免看官乏味,本系列博客限定在较新的.Net framework 4.5.1,Asp.net MVC5,IIS 7.X集成模式. 对于微软应用层的技术.我向来不舍得花太多时间学习.但又由于公司 ...
- go println与printf区别
Println 与Printf 都是fmt 包中的公共方法 Println :可以打印出字符串,和变量: Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整 ...
- 一个奇妙的java坑:Long 类型的比较
Long userId=127L; Long authorId=127L; System.out.println(userId==authorId);//true userId=128L; autho ...
- 如何删除GIT中的.DS_Store
.DS_Store 是什么 使用 Mac 的用户可能会注意到,系统经常会自动在每个目录生成一个隐藏的 .DS_Store 文件..DS_Store(英文全称 Desktop Services Stor ...
- 基于tiny4412原生uboot修改制作SD启动并烧写到emmc
最近入手tiny4412的标准板,底板SDK型号为1506.但是因为友善之臂提供的superboot不能进入boot菜单,此时我就不能通过tftp下载内核和通过nfs挂载根文件系统,于是想自己做个ub ...