洛谷P1365 期望dp
题目描述
一个o/x序列的得分为其中每个o的极大连续子段长度的平方和,比如ooxxxxooooxxx,分数就是
\(2 \times 2 + 4 \times 4 = 4 +16=20。\)
现给定一个o/x/?序列,?代表着有\(\frac 12\)的几率是o,\(\frac 12\)的几率是x,求序列的期望得分
\(n\le 3e5 + 5\)
正解:O(n)期望dp
我们假设\(f_i\)代表前i个数的期望答案,这时推导时我们发现,需要用到最后一段连续o的个数,但是迫于数据范围,这个值不能直接算,也不能枚举。这个时候我们该怎样得到这样一个值呢?这道题给了我们一个全新的思路。
对于每一位p,计算1~p - 1位连续'o'个数的期望,再用期望值计算:
\(s_p\) == 'x':E(p) = 0
\(s_p\) == 'o':E(p) = E(p - 1) + 1
\(s_p\) == '?':E(p) = \(\frac {(E(p - 1) + 1) + 0}{2}\) (E(p - 1) + 1是'?'为'o'的收益,0是'?'为'x'的收益)
将极大段的'o'拆分可得,\({(p + 1)}^2 - p^2 = 2p + 1\),对于每一个值为'o'的位置,\(f_p = f_{p - 1} + 2s_{p - 1} + 1\),对于每一个值为'?'的位置,\(f_p = f_{p - 1} + \frac {2s_{p - 1} + 1}2\)
一句话概括:当前位收益E(2p + 1) = 2E(p) + 1
Code
#include<bits/stdc++.h>
using namespace std;
string s;
double f[300005];
int n;
int main()
{
double len = 0;
cin>>n;
cin>>s;
f[0] = 0;
for(int i = 0;i < s.length();i++)
{
if(s[i] == 'o')
{
f[i + 1] = f[i] + len * 2 + 1;
len++;
}
if(s[i] == 'x')
{
f[i + 1] = f[i];
len = 0;
}
if(s[i] == '?')
{
f[i + 1] = f[i] + len + 0.5;
len = (len + 1) / 2;
}
}
cout<<fixed<<setprecision(4)<<f[n];
return 0;
}
洛谷P1365 期望dp的更多相关文章
- 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp
洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...
- 洛谷教主花园dp
洛谷-教主的花园-动态规划 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ...
- 洛谷P1365 WJMZBMR打osu! / Easy——期望DP
题目:https://www.luogu.org/problemnew/show/P1365 平方和怎样递推? 其实就是 (x+1)^2 = x^2 + 2*x + 1: 所以我们要关注这里的 x — ...
- 洛谷 P1365 WJMZBMR打osu! / Easy
题目背景 原 维护队列 参见P1903 题目描述 某一天\(WJMZBMR\)在打\(osu~~~\)但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有\(n\)次点击要做,成功 ...
- 洛谷P4719 动态dp
动态DP其实挺简单一个东西. 把DP值的定义改成去掉重儿子之后的DP值. 重链上的答案就用线段树/lct维护,维护子段/矩阵都可以.其实本质上差不多... 修改的时候在log个线段树上修改.轻儿子所在 ...
- 2018普及组摆渡车洛谷5017(dp做法)
啦啦啦,这一篇是接上一篇的博客,上一篇是记忆化搜索,而这一篇是dp+前缀和小技巧 dp这种玄学做法我这种蒟蒻当然不是自己想出来的,参考https://blog.csdn.net/kkkksc03/ar ...
- 洛谷P3975 跳房子 [DP,单调队列优化,二分答案]
题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一 ...
- 洛谷1373(dp)
常规线性dp,需要时就加一维.\(dp[i][j][t][s]\)表示在点\((i,j)\)时瓶子里剩\(t\)且为\(s\)走(0代表小a,1代表uim)时的方案数. de了半天发现是初次尝试的快速 ...
- 洛谷P4719 动态DP —— 动态DP(树剖+矩乘)
题目:https://www.luogu.org/problemnew/show/P4719 感觉这篇博客写得挺好:https://blog.csdn.net/litble/article/detai ...
- 洛谷1280(dp)
题目性质:1.当前节点空闲则必须做任务,而不是可选可不选:2.然而前面的如果能覆盖当前节点,就可以不选. 解决方法:倒着扫可以很好地解决这两个问题.dp[i]为时刻i可得的最大空闲时间.如果此刻没有任 ...
随机推荐
- Enum.Parse的使用
Enum的转换,用Enum.Parse() Enum.Parse()方法.这个方法带3个参数,第一个参数是要使用的枚举类型.其语法是关键字typeof后跟放在括号中的枚举类名.第二个参数是要转换的字符 ...
- mindxdl--common--utils.go
// Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common define co ...
- docker中php xdebug调试开发
docker-compose环境来自:https://github.com/zhaojunlik...原文:http://blog.oeynet.com/post/9... 说明 在开发中,断点调试是 ...
- Gitlab 和 jenkins 搭建遇到的坑
1 Gitlab 端口默认 80 所有其他程序提前把端口腾空 2 Gitlab 配置的是pub 公钥 3 java版本要在1.8以上 4 Jenkins 配置私钥 5 需要配置各个目录的workspa ...
- JavaWeb实战:基础CRUD+批量删除+分页+条件
技术栈及相关参考资料: MyBatis基础 Servlet基础 ServletRequest和ServletResponse MVC模式和三层架构 AJAX基础+Axios基础 Vue前端框架 Ele ...
- 随笔——安卓手机调试微信网页,x5错误页
如果打开debugx5.qq.com提示您使用的不是x5内核 那么先打开debugmm.qq.com/?forcex5=true 再打开http://debugtbs.qq.com 将进入下面这个页面 ...
- vivo大数据日志采集Agent设计实践
作者:vivo 互联网存储技术团队- Qiu Sidi 在企业大数据体系建设过程中,数据采集是其中的首要环节.然而,当前行业内的相关开源数据采集组件,并无法满足企业大规模数据采集的需求与有效的数据采集 ...
- Day29 派生, 封装 , 多态, 反射
Day29 派生, 封装 , 多态, 反射 内容概要 派生方法的实践 面向对象之封装 面向对象之多态 面向对象之反射 反射的实践案例 内容详细 1.派生方法的实践 #需求展示 import json ...
- 【Java EE】Day09 JavaScript基础
一.JavaScript简介 二.JavaScript语法 三.JavaScript对象
- 踩坑记录:Redis的lettuce连接池不生效
踩坑记录:Redis的lettuce连接池不生效 一.lettuce客户端 lettuce客户端 Lettuce 和 Jedis 的都是连接Redis Server的客户端程序.Jedis在实现上是直 ...