• 40 pts: 考场上打了40分暴力,理论的话就是概率树,把每一个状态去去到各个带权(概率)的和就是答案

最终处理的话就是dfs出01序列0代表没有幻象,1代表出现幻象然后在每一次dfs出一段序列的时候双指针check一下更新答案

代码并不难,就是这样写的复杂度O(2n)

code: (40pts)

# include <bits/stdc++.h>
using namespace std;
double ans;
int n,a[];
double p1[],p0[];
void get()
{
double pr=1.0;
for (int i=;i<=n;i++)
if (a[i]==) pr*=p1[i];
else pr*=p0[i];
int i=; double sum=;
while (i<=n) {
if (a[i]==) { i++; continue;}
int j=i; int res=;
while (a[j]==&&j<=n) j++,res++;
i=j;
sum=sum+(double) res*res;
}
ans+=sum*pr;
}
void dfs(int dep)
{
if (dep==n+) { get(); return; }
a[dep]=; dfs(dep+);
a[dep]=; dfs(dep+);
}
int main()
{
freopen("phantom.in","r",stdin);
freopen("phantom.out","w",stdout);
scanf("%d",&n);
int x;
for (int i=;i<=n;i++) {
scanf("%d",&x);
p1[i]=(double) x/100.0;
p0[i]=1.0-p1[i];
}
dfs();
printf("%.1lf\n",ans);
return ;
}
  • 60pts:hjc20032003考场上写了60分DP,这大概是O(n2)[前缀积]或者是O(n3)复杂度

具体做法是这样的:

令f[i]表示第i秒前幻象的期望,枚举是从j转移过来的,(这里需要注意枚举的j是断点所以从0开始枚举表示不断,否则会重复计数)

转移方程式这样的:

code:(60pts)

# include <bits/stdc++.h>
using namespace std;
const int MAXN=;
double f[MAXN],p[MAXN];
int n;
int main()
{
scanf("%d",&n); int x;
for (int i=;i<=n;i++) {
scanf("%d",&x);
p[i]=(double)x/100.0;
}
f[]=p[];
for (int i=;i<=n;i++) {
f[i]=0.0;
for (int j=;j<=i;j++) {
double pr=1.0;
for (int k=j+;k<=i;k++) pr*=p[k];
f[i]+=pr*(-p[j])*(f[j-]+(i-j)*(i-j));
}
}
printf("%.1lf\n",f[n]);
return ;
}
  • 100pts: 状态改变一下,

记f[i]为第i秒之前期望幻象值

记g[i]为第i秒前连续期望幻象值

显然

    • g[i]=(g[i-1]+1)*P[i]
    • f[i]=f[i-1]+P[i]*((g[i-1]+1)2-g[i-1]2)

于是完成了O(1)转移,总复杂度O(n)

code(100 pts)

# include <bits/stdc++.h>
using namespace std;
const int MAXN=1e6+;
double p[MAXN],f[MAXN],g[MAXN];
int n;
double sqr(double x){ return x*x;}
int main()
{
scanf("%d",&n);
int x;
for (int i=;i<=n;i++) {
scanf("%d",&x);
p[i]=(double) x/100.0;
}
f[]=p[]; g[]=p[];
for (int i=;i<=n;i++) {
f[i]=f[i-]+p[i]*(sqr(g[i-]+)-sqr(g[i-]));
g[i]=(g[i-]+)*p[i];
}
printf("%.1lf\n",f[n]);
return ;
}

HGOI 20181027 幻象(概率DP)的更多相关文章

  1. Codeforces 28C [概率DP]

    /* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队 ...

  2. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  3. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

  4. POJ 2151 Check the difficulty of problems (概率DP)

    题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...

  5. 概率DP light oj 1030

    t组数据 n块黄金 到这里就捡起来 出发点1 到n结束  点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6  如果满6个的话 否则 ...

  6. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  7. [转]概率DP总结 by kuangbin

    概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...

  8. SGU 422 Fast Typing(概率DP)

    题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...

  9. HDU 4050 wolf5x(动态规划-概率DP)

    wolf5x Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. 搭建HBase的本地模式、伪分布式、全分布式和HA模式

    一.安装HBase: 我这里选择的是hbase-1.3.1-bin.tar.gz版本解压HBase: tar -zxvf hbase-1.3.1-bin.tar.gz -C ~/training 配置 ...

  2. 20155333 《网络对抗》 Exp9 Web安全基础

    20155333 <网络对抗> Exp9 Web安全基础 基础问题回答 1.SQL注入攻击原理,如何防御? 原理: 通过在用户名.密码登输入框中输入一些',--,#等特殊字符,实现引号闭合 ...

  3. mfc 基类与子类

    基类(父类) 派生类(子类) 一.基类(父类) 基类(又称为父类,基类与派生类是相对的关系! 通过继承机制,可以利用已有的数据类型来定义新的数据类型.所定义的新的数据类型不仅拥有新定义的成员,而且还同 ...

  4. [图片生成]使用VAEs生成新图片

    变分自动编码器生成图片 从隐图像空间进行采样以创建全新的图像或编辑现有图像是目前创作AI最受欢迎和最成功的应用方式. 图像隐空间取样 图像生成的关键思想是开发表示的低维潜在空间(自然是矢量空间),其中 ...

  5. Linux日记Day3---Linux的文件属性与目录配置

    Linux最优秀的地方之一,就在于它的多用户.多任务环境.为了让用户具有较安全的管理机制,文件的权限管理是很重要的.Linux通常将文件的访问方式分为分为三个类别,分别是owner/group/oth ...

  6. Centos7下python3安装ipython

    一.通过压缩包安装ipython 1.下载ipython安装包 [root@localhost ~]# wget https://pypi.python.org/packages/79/63/b671 ...

  7. [CF1019D]Large Triangle[极角排序+二分]

    题意 给出平面上 \(n\) 个点 \((x_i, y_i)\),问是否存在三个点构成的三角形的面积恰好为 \(S\) ,有的话,输出任意一组解即可. \(n\leq 2000\) 分析 BZOJ37 ...

  8. MVC的多页面后台管理系统

    MVC的多页面后台管理系统 同样功能的后台管理系统,也是可以使用 ASP.NET MVC .Web API 和JQuery 来制作. 所有的功能都与Angular js的单页面相同.应用层所有的方法都 ...

  9. kubernetes 网络故障遇见的坑

    1.记录一下自己搭建kubernetes 集群遇见的坑. 过程是我学技术以来最大的bug,处处都是坑,稍微写成一点, 就完全起不来, 起不来之后, 还找不到故障点, 郁闷之极. 后续会慢慢分享给大家. ...

  10. Azure 基础:File Storage

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在前文中介绍了 Blob Storage 的基本用 ...