POJ 3744 【矩阵快速幂优化 概率DP】
搞懂了什么是矩阵快速幂优化....
这道题的重点不是DP.
/*
题意:
小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小明安全到达最后的概率。
思路:
把路分成好多段,小明安全走完每一段的概率乘起来就是答案。
dp[i]=p*dp[i-1]+(1-p)*dp[i-2];
参考fib数列构造矩阵进行快速幂。
注意初始化的时候,起点概率看作1,起点减一也就是有地雷的地方概率看作0。//屌丝一开始在这里没搞明白。
*/
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct mat
{
double m[][];
};
mat from;
double ans[];
mat mul(mat a,mat b)
{
mat c;
double tmp=;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
tmp=;
for(int k=;k<;k++)
{
tmp+=a.m[i][k]*b.m[k][j];
}
c.m[i][j]=tmp;
}
}
return c;
}
int jilu[];
mat calpow(int n)
{
mat tmp=from;
mat ans;
memset(ans.m,,sizeof(ans.m));
ans.m[][]=;
ans.m[][]=;
while(n)
{
if(n&)
{
ans=mul(ans,tmp);
}
tmp=mul(tmp,tmp);
n/=;
}
return ans;
}
double solve(int n)
{
mat ttt;
ttt=calpow(n);
return -ttt.m[][];
}
int main()
{
int n;
double p;
while(scanf("%d%lf",&n,&p)!=EOF)
{
from.m[][]=p;
from.m[][]=-p;
from.m[][]=;
from.m[][]=;
for(int i=;i<=n;i++)
{
scanf("%d",&jilu[i]);
}
sort(jilu+,jilu++n);
ans[]=solve(jilu[]-);
for(int i=;i<=n;i++)
{
ans[i]=solve(jilu[i]-jilu[i-]-);//这里为什么减一以后要注意了
}
double rel=;
for(int i=;i<=n;i++)
{
rel*=ans[i];
}
printf("%.7lf\n",rel);
}
}
POJ 3744 【矩阵快速幂优化 概率DP】的更多相关文章
- POJ 3744 Scout YYF I(矩阵快速幂优化+概率dp)
http://poj.org/problem?id=3744 题意: 现在有个屌丝要穿越一个雷区,雷分布在一条直线上,但是分布的范围很大,现在这个屌丝从1出发,p的概率往前走1步,1-p的概率往前走2 ...
- poj 3744 Scout YYF I (矩阵快速幂 优化 概率dp)
题目链接 分析&&题意来自 : http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710586.html 题意: 在一条不满地雷的 ...
- poj 3744 矩阵快速幂+概率dp
题目大意: 输入n,代表一位童子兵要穿过一条路,路上有些地方放着n个地雷(1<=n<=10).再输入p,代表这位童子兵非常好玩,走路一蹦一跳的.每次他在 i 位置有 p 的概率走一步到 i ...
- hdu 5564 Clarke and digits 矩阵快速幂优化数位dp
Clarke and digits Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...
- 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)
传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...
- BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*
BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...
- 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)
Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...
- 2018.10.22 bzoj1009: [HNOI2008]GT考试(kmp+矩阵快速幂优化dp)
传送门 f[i][j]f[i][j]f[i][j]表示从状态"匹配了前i位"转移到"匹配了前j位"的方案数. 这个东西单次是可以通过跳kmp的fail数组得到的 ...
随机推荐
- Linux下升级python
本文的Linux系统为CentOS 7 64 在Linux系统的下载文件夹中邮件打开终端,输入命令: wget http://www.python.org/ftp/python/3.4.4/Pytho ...
- Character 比较注意先要转换成字符串类型
Character tmp = '/'; if("/".equals(tmp)){ System.out.print("error"); } if(" ...
- 本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。——Oracle监听器服务无法启动!
问题: oracle服务设置为手动启动.但是开机后手动启动监听服务后弹出框,提示“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止.某些服务在未由其他服务或程 ...
- Android 中Fragment使用
Android 中Fragment使用 public class MainActivity extends Activity { public static String[] array = { &q ...
- Jquery实现购物车物品数量的加减特效
今天网友翠儿在用Jquery实现购物车物品数量的加减特效的时候遇到问题来问我,我后来帮她解决了这个Jquery特效,现在把它整理出来分享给大家用,虽然功能比较简单,但是很实用. 主要包括了以下功能: ...
- 【linux】常见的网络管理命令
last:查看目前和过去的用户登录信息 [root@paulinux ~]# last root pts/0 192.168.1.106 Fri Jun 10 09:53 still logged i ...
- JAVA获取当前时间加一天
01.获取当前时间 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.for ...
- 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html
概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...
- KindEditor得不到textarea值的解决方法----摘至天涯
以前有朋友遇到过这个问题,就是KindEditor在火狐下或者其他浏览器下都无法得到textarea文本框的值,点击表单提交按钮得到的是空白.昨天天涯PHP博客[http://blog.phpha.c ...
- C#生成二维码示例
其实现在二维码越来越流行,网上也有很多生成二维码的类库.写一下WEB生成二维码注意事项吧! 目前C#生成二维码大部分都是使用ThoughtWorks.QRCode或者ZXing类库生成,主要说一下Th ...