BZOJ 4318 OSU! (概率DP)
题意
中文题面,难得解释了 题目传送门
分析
- 考虑到概率DPDPDP,显然可以想到f(i,j)f(i,j)f(i,j)表示到第iii位末尾有jjj个111的期望值。最后输出f(n+1,0)f(n+1,0)f(n+1,0)即可
- 但 n<=100000n<=100000n<=100000
- xxx表示连续的111的个数。所以想想怎么可以得到 x3x^3x3。
- 有 x3=(x−1)3+3(x−1)2+3(x−1)+1x^3=(x-1)^3+3(x-1)^2+3(x-1)+1x3=(x−1)3+3(x−1)2+3(x−1)+1
- 用EEE表示期望,记p[i]p[i]p[i]表示第iii位选111的概率,则E(x3)=( E((x−1)3)+E(3(x−1)2)+E(3(x−1))+E(1) )∗p[i]E(x^3)=(\ E((x-1)^3)+E(3(x-1)^2)+E(3(x-1))+E(1)\ )*p[i]E(x3)=( E((x−1)3)+E(3(x−1)2)+E(3(x−1))+E(1) )∗p[i]
- 那么我们假设f1f1f1表示存在于末尾的xxx的期望值;f2f2f2表示存在于末尾的x2x^2x2的期望值;f3f3f3表示前面的所有x3x^3x3的期望值,也就是答案。
- 转移方程式就为:
f3(i)=f3(i−1)+(3f2(i−1)+3f1(i−1)+1)∗p[i]f2(i)=(f2(i−1)+2f2(i−1)+1)∗p[i]f1(i)=(f1(i−1)+1)∗p[i]\begin{aligned}f3(i)&=f3(i-1)+(3f2(i-1)+3f1(i-1)+1)*p[i]\\
f2(i)&=(f2(i-1)+2f2(i-1)+1)*p[i]\\
f1(i)&=(f1(i-1)+1)*p[i]\end{aligned}f3(i)f2(i)f1(i)=f3(i−1)+(3f2(i−1)+3f1(i−1)+1)∗p[i]=(f2(i−1)+2f2(i−1)+1)∗p[i]=(f1(i−1)+1)∗p[i] - 本来第一个方程式看起来有点奇怪,其实那是合并之后的结果。我们记LastLastLast为i−1i-1i−1之前的已经完结的E(x3)E(x^3)E(x3)的总和,这一部分只是为了为最终输出的答案做贡献才放在f3f3f3里。那么剩下的记为NowNowNow,就是未完结、存在于末尾的E(x3)E(x^3)E(x3)。有Last+Now=f3(i−1)Last+Now=f3(i-1)Last+Now=f3(i−1)
- 假如这个位置选了000,那么不会再往后做贡献,但是要把这一部分加到最终答案里面去。这一部分值为Now∗(1−p[i])Now*(1-p[i])Now∗(1−p[i])
- 否则将会对后面产生贡献,值为Now∗p[i]Now*p[i]Now∗p[i],其实也就是充当E(x3)=( E((x−1)3)+E(3(x−1)2)+E(3(x−1))+E(1) )∗p[i]E(x^3)=(\ E((x-1)^3)+E(3(x-1)^2)+E(3(x-1))+E(1)\ )*p[i]E(x3)=( E((x−1)3)+E(3(x−1)2)+E(3(x−1))+E(1) )∗p[i]中的E((x−1)3)E((x-1)^3)E((x−1)3)
- 所以f3(i)=Last+Now∗(1−p[i])+(Now+3f2(i−1)+3f1(i−1)+1)∗p[i]=Last+Now∗((1−p[i)]+p[i])+(3f2(i−1)+3f1(i−1)+1)∗p[i]=Last+Now+(3f2(i−1)+3f1(i−1)+1)∗p[i]=f3(i−1)+(3f2(i−1)+3f1(i−1)+1)∗p[i]\begin{aligned}f3(i)&=Last+Now*(1-p[i])+(Now+3f2(i-1)+3f1(i-1)+1)*p[i]\\&=Last+Now*((1-p[i)]+p[i]) + (3f2(i-1)+3f1(i-1)+1)*p[i]\\&=Last + Now+ (3f2(i-1)+3f1(i-1)+1)*p[i]\\&=f3(i-1)+(3f2(i-1)+3f1(i-1)+1)*p[i]\end{aligned}f3(i)=Last+Now∗(1−p[i])+(Now+3f2(i−1)+3f1(i−1)+1)∗p[i]=Last+Now∗((1−p[i)]+p[i])+(3f2(i−1)+3f1(i−1)+1)∗p[i]=Last+Now+(3f2(i−1)+3f1(i−1)+1)∗p[i]=f3(i−1)+(3f2(i−1)+3f1(i−1)+1)∗p[i]
- 而且DPDPDP时不用开数组
AC Code(300B)
#include <bits/stdc++.h>
using namespace std;
int main () {
int n;
scanf("%d", &n);
double f1 = 0, f2 = 0, f3 = 0, p;
while(n--) {
scanf("%lf", &p);
f3 += (3*f1 + 3*f2 + 1) * p;
f2 = (f2 + 2*f1 + 1) * p;
f1 = (f1 + 1) * p;
}
printf("%.1f\n", f3);
}
BZOJ 4318 OSU! (概率DP)的更多相关文章
- BZOJ 4318: OSU! 期望DP
4318: OSU! 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4318 Description osu 是一款群众喜闻乐见的休闲软件 ...
- bzoj 4318 OSU 概率期望dp
可以发现:f[i]转移到f[i+1]只和最后一串1的长度和平方有关, 因为如果新加的位置是1,贡献就是(x+1)^3-x^3=3x^2+3x+1,否则为0: 所以对于每一个位置,处理出期望的f,x和x ...
- bzoj 4318 OSU! —— 期望DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4318 期望DP,因为平方的期望不等于期望的平方,所以用公式递推: 第一次推错了囧,还是看这位 ...
- BZOJ - 4318: OSU! (期望DP&Attention)
Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...
- BZOJ 4318 OSU! ——期望DP
这次要求$x^3$的概率和. 直接维护三个值$x$ $x^2$ $x^3$的期望. 概率的平方不等于平方的概率. #include <map> #include <ctime> ...
- BZOJ 4318 OSU!(概率DP)
题意 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串.在 ...
- BZOJ 4318: OSU! 期望概率dp && 【BZOJ3450】【Tyvj1952】Easy 概率DP
这两道题是一样的...... 我就说一下较难的那个 OSU!: 这道15行的水题我竟然做了两节课...... 若是f[i][0]=(1-p)*f[i-1][0]+(1-p)*f[i-1][1],f[i ...
- BZOJ 4318: OSU! [DP 概率]
传送门 题意:变成了告诉每个操作的成功概率,并且得分是三次方 一样....分别维护$x,\ x^2,\ x^3$的期望就行了 注意$x^3$是我们最终求的得分,即使失败得分也要累加上之前的 #incl ...
- bzoj 4318 OSU! - 动态规划 - 概率与期望
Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...
随机推荐
- K8S从入门到放弃系列-(11)kubernetes集群网络Calico部署
摘要: 前面几个篇幅,已经介绍master与node节点集群组件部署,由于K8S本身不支持网络,当 node 全部启动后,由于网络组件(CNI)未安装会显示为 NotReady 状态,需要借助第三方网 ...
- Python 实现把两个排好序的的列表合并成一个排序列表
列表是升序的 # -*- coding: utf-8 -*- # 合并两个排序的数组 def merge_list(a, b): if not a: return b if not b: return ...
- 消息中间件——RocketMQ(一) 环境搭建(完整版)
每章一点正能量:每当你想要放弃的时候,就想想是为了什么才一路坚持到现在. 前言 最近在回顾复习Java基础中的一些知识点,发现了一些以前见过但是没有留意却特别有意思的知识特性,比如这次想分享的Java ...
- Linux (x86) Exploit 开发系列教程之七 绕过 ASLR -- 第二部分
(1)原理: 使用爆破技巧,来绕过共享库地址随机化.爆破:攻击者选择特定的 Libc 基址,并持续攻击程序直到成功.这个技巧是用于绕过 ASLR 的最简单的技巧. (2)漏洞代码 //vuln.c # ...
- css border 三角形阴影(不规则图形阴影) & 多重边框的制作
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! border 的组合写法 border:border-width border-style border- ...
- “df: cannot read table of mounted file systems”.
“df: cannot read table of mounted file systems”.“df -l” returned an error: “df: cannot read table of ...
- 理解JVM之对象的生命周期
1.对象的创建 1) 当虚拟机遇到一条new的指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载,解析和初始化过. 2) 在类加载检查通 ...
- 1249: 人见人爱A^B
题目描述 求A^B的最后三位数表示的整数. 说明:A^B的含义是“A的B次方” 输入 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果 ...
- 【Redis】事务 (超详细)
一.概述 二.相关命令列表 2.1 MULTI 2.2 EXEC 2.3 DISCARD 2.4 WATCH key [key ...] 2.5 UNWATCH 三.命令示例 3.1 事务被正常执行 ...
- windows使用msi包安装mysql8.0.12
1.前言 利用windows提供的二进制分发包(msi)安装是非常简单的,只要根据提示安装就可以了,和安装普通软件没有什么区别.但是如果想在安装的时候就把规划的配置好,是需要看懂每个步骤到底做什么用, ...