• 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. kettle学习笔记(一)——入门与安装

    一.概述 1.kettle是什么 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,绿色无需安装,数据抽取高效稳定.中文名称叫水壶,该项目的主程序 ...

  2. 20155232《网络对抗》Exp8 Web基础

    20155232<网络对抗>Exp 8 Web基础 一.实践内容 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编 ...

  3. 20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M

    exp1 PC平台逆向破解(5)M 一.实验内容 1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发 ...

  4. EasyUI-Tree的使用

            在web开发中,树是比较常见的东西.以前用过zTree,也用过EasyUI-Tree,过了好久后发现都忘记怎么用了. 这几天重新回顾了EasyUI-tree的使用,在此将相关知识点记录 ...

  5. 变量内存空间的释放---c语言

    堆栈内存释放: 栈的内存是由编译器自动分配.释放,出了作用域就释放. 堆的内存由程序员分配.释放,他的作用域是整个程序,如果程序没有释放,程序结束时会自动释放.

  6. python 回溯法 子集树模板 系列 —— 16、爬楼梯

    问题 某楼梯有n层台阶,每步只能走1级台阶,或2级台阶.从下向上爬楼梯,有多少种爬法? 分析 这个问题之前用分治法解决过.但是,这里我要用回溯法子集树模板解决它. 祭出元素-状态空间分析大法:每一步是 ...

  7. PHP 练习(租房子)

    一.题目要求 二.题目做法 1.建立数据库 2.封装类文件 <?php class DBDA { public $fuwuqi="localhost"; //服务器地址 pu ...

  8. Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述

    目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...

  9. [转]申瓯 JSY2000-06 程控电话交换机呼叫转移设置

    说明:若申瓯程控电话交换机分机有事不在位置上或遇忙分机正忙时为使某些重要来话不丢失,可设置将呼入本机的电话转移至其他分机及公网固定电话或手机.电话交换机使用了本功能不管分机用户在什么地方都能接听到办公 ...

  10. Nodejs如何把接收图片base64格式保存为文件存储到服务器上

    app.post('/upload', function(req, res){ //接收前台POST过来的base64 var imgData = req.body.imgData; //过滤data ...