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

题意:一条路,起点为1,有概率p走一步,概率1-p跳过一格(不走中间格的走两步),有n个点不能走,问到达终点(即最后一个坏点后)不踩坏点的概率为多少。坏点的坐标范围 [1,100000000]
 
概率dp的算是入门题…其实写起来和以前的矩阵似乎并没有什么区别呢…状态其实还挺好想的。
坏点sort一下;然后把每一个坏点后一格走到一个坏点前一格的概率乘到答案上,再乘一个1-p跳到坏点后,循环即可。
 
代码
 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
//using namespace std;
const int maxn=;
const double eps=1e-;
const int modn=;
int n;double p,ans;
int b[]={};
double c[]={};
struct mat{
double e[][];
mat(){memset(e,,sizeof(e));}
};mat a;
void yu(){
memset(b,,sizeof(b));
a.e[][]=1.0;
a.e[][]=1.0-p;
a.e[][]=p;
ans=;
}
mat Mul(mat x,mat y){
mat z;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
z.e[i][j]+=x.e[i][k]*y.e[k][j];
}
}
}
return z;
}
mat Pow(mat x,int k){
mat z;
z.e[][]=;z.e[][]=;
while(k){
if(k&){
z=Mul(x,z);
}
k/=;
x=Mul(x,x);
}
return z;
}
int main(){
while(~scanf("%d%lf",&n,&p)){
yu();
for(int i=;i<=n;i++){
scanf("%d",&b[i]);
}
std::sort(b+,b++n);
b[]=;
int f=;
for(int i=;i<=n;i++){
if(b[i]==b[i-]+){
printf("%.7f\n",0.0);
f=;
break;
}
}if(f) continue;
c[]=1.0,c[]=p;
for(int i=;i<=n;i++){
if(b[i]-b[i-]==);
else if(b[i]-b[i-]==){
ans*=p;
}else{
mat z=Pow(a,b[i]-b[i-]-);
ans*=c[]*z.e[][]+c[]*z.e[][];
}
ans*=(1.0-p);
}
printf("%.7f\n",ans+eps);
}
return ;
}
 

POJ3744 Scout YYF I 概率DP+矩阵快速幂的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. poj3744 (概率DP+矩阵快速幂)

    http://poj.org/problem?id=3744 题意:在一条铺满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,10000000 ...

  7. 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 ...

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

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

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

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

随机推荐

  1. XML & JSON---iOS-Apple苹果官方文档翻译

      技术博客http://www.cnblogs.com/ChenYilong/   新浪微博http://weibo.com/luohanchenyilong   //转载请注明出处--本文永久链接 ...

  2. 面试C++失败

    到今天,面试已经整整一周,一个offer没有收到,mmp. 无奈,痛苦,迷茫. 以前活的太安逸,太舒适了. 自以为是,异想天开. 要重新振作起来. 要不断学习,保持强大,未来之路才会越走越宽.

  3. Let's Encrypt 免费通配 https 签名证书 安装方法

    安装环境 centOs7 主要通过 acme.sh (bash脚本)来注册签名 git地址:https://github.com/Neilpang/acme.sh 申请证书流程 1.申请证书-> ...

  4. 在Unity中实现屏幕空间反射Screen Space Reflection(4)

    第四部分讲一下如何在2D屏幕空间步进光线. http://casual-effects.blogspot.com/2014/08/screen-space-ray-tracing.html 中的代码感 ...

  5. C++ Boost库 uBLAS 笔记

    构造 Vector #include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/io.hpp> ...

  6. win32的回调函数

    [转]http://blog.csdn.net/w419675647/article/details/6599070 众所周知,win32的回调函数WndProc()是操作系统调用的函数,win32用 ...

  7. Linux上java环境变量配置

    1.java配置 配置环境变量在/etc/profile下增加 # set Java environment JAVA_HOME=/usr/share/jdk1.6.0_43 PATH=$JAVA_H ...

  8. DedeCms当前位置导航去掉最后的分隔符>

    DedeCms的当前位置导航调用标签{dede:field name=’position’ /},在栏目页里调用的当前位置导航,最后会出现分割符号“>”,如:主页 > DedeCms 模板 ...

  9. 湖南省第六届省赛题 Biggest Number (dfs+bfs,好题)

    Biggest Number 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 You have a maze with obstacles and non-zero di ...

  10. 不需要打密码的sudo方法

    Linux下频繁输入sudo很麻烦.如果你的账户已经是sudoer了,那么编辑/etc/sudoers,将 %sudo ALL=(ALL:ALL) ALL 修改为: %sudo ALL=(ALL) N ...