当前位置: 首页 > news >正文

P1654 OSU!

难度 算法s 日期 题目链接
提高+/省选− 数学期望、递推 2025-07-21~22 https://luogu.com.cn/problem/P1654

似乎是一道蛮经典的期望递推题。

洛谷上的题解看不懂,老师讲的也很简略。只有自己推起来感觉很复杂。。。心累。

题意简述

一共有 \(n\) 次操作,第 \(k\) 次操作(\(1\le k\le n\))成功的概率是 \(p_i\)。成功记作 \(1\),失败记作 \(0\),那么所有操作的结构依次连起来就可以得到一个 \(0/1\) 串。在这个串中,每个极大的、连续的 \(X\)\(1\) 会对分数产生 \(X^3\) 的贡献,每个全为 \(1\) 的子段的贡献线性累加。

求:贡献总和的期望 \(E\)

范围:\(1\le n\le10^5\)

思路

考虑线性递推。

  • 我们把以位置 \(k\) 结尾的一串 \(1\)长度记为 \(X_k\)

  • 让我们先试着求长度一次方的期望。我们把 \(X_k\) 的期望记为 \(E(X_k)\)。在这个位置 \(k\),我们向串尾追加第 \(k+1\) 个操作结果,有两种情况:

    • \(p_{k+1}\) 的概率第 \(k+1\) 次操作成功。成功后 \(X_{k+1}\) 的期望为 \(E(X_k)+1\)。(也就是 \(1\) 串的长度 \(+1\)

    • 另外 \(1-p_{k+1}\) 的概率第 \(k+1\) 次操作失败。失败后串尾就没有 \(1\) 了,所以 \(E(X_k)=0\)

    所以:

    \[E(X_{k+1})=p_{k+1}E(X_k+1)+(1-p_{k+1})\times0. \]

    由期望的线性性,

    \[E(X_k+1)=E(X_k)+E(1)=E(X_k)+1, \]

    这里常数 \(C\) 的期望 \(E(C)\) 当然就是 \(C\) 了,不然还能有别的取值吗。进一步化简,得:

    \[E(X_{k+1})=p_{k+1}[E(X_k)+1].(1) \]


  • 类似地,记 \(X_k^2\) 的期望为 \(E(X_k^2)\)。我们尝试求一下长度二次方的期望的递推式:

    \[E(X_{k+1}^2)=p_{k+1}E[(X_k+1)^2]+(1-p_{k+1})\times0 \]

    请注意: 此处是 \(E[(X_k+1)^2]\) 而不是 \([E(X_k)+1]^2\),写成后面那个就推不出来了。(而且也是错的)。

    化简 \(E[(X_k+1)^2]\),依旧是利用期望的线性性:

    \[E[(X_k+1)^2]=E(X_k^2+2X_k+1)=E(X_k^2)+2E(X_k)+1. \]

    化简整个式子:

    \[E(X_{k+1}^2)=p_{k+1}[E(X_k^2)+2E(X_k)+1].(2) \]


  • 类似地,记 \(X_k^3\) 的期望为 \(E(X_k^3)\)。那么长度三次方的期望的递推式:

    \[E(X_{k+1}^3)=p_{k+1}E[(X_k+1)^3]+(1-p_{k+1})\times0, \]

    化简(过程略):

    \[E(X_{k+1}^3)=p_{k+1}[E(X_k^3)+3E(X_k^2)+3E(X_k)+1]. \]


期望推过瘾了,那我们怎么求答案呢?我们假设 \([1,k]\) 上的分数的期望为 \(E_k\),那么\(E_n\) 就是答案了,接下来考虑如何递推:

  • \(p_{k+1}\) 的概率第 \(k+1\) 次操作成功,那么 \(1\) 串继续累加,\(E_{k+1}=p_{k+1}[E_k+3E(X_k^2)+3E(X_k)+1]\)。这一部分和长度三次方的期望是一样的(只不过我们把 \(E(X_k^3)\) 换成了 \(E_k\))。

  • 另外 \(1-p_{k+1}\) 的概率第 \(k+1\) 次操作失败,那么期望不变, \(E_{k+1}=E_{k}\)注意,这里就和上面长度三次方的递推式不同了。因为上面我们规定 \(X_k\) 是以 \(k\) 结尾的 \(1\) 串的长度,如果操作失败,长度和期望都清零了。但是这里我们是要统计累积的期望分数,所以期望不清零。

加起来就得到:

\[E_{k+1}=E_{k}+p_{k+1}[3E(X_{k}^2)+3E(X_{k})+1].(3) \]

结合 \((1)(2)(3)\),就容易设计递推了。

补充

请注意: \(E(X_k^3)\not=[E(X_k)]^3\),即三次方的期望 \(\not=\) 期望的三次方。这也解释了我们为什么要大费周章地推式子,而不是直接推出 \(E(X_n)\) 然后取三次方。

为了避免这个混淆,上面我不辞辛苦地把一个个期望都严格写成 \(E(X_k)\) 而不是 \(E(k)\)。TwT

http://www.hskmm.com/?act=detail&tid=25209

相关文章:

  • DynamoDB十年演进:云原生数据库的技术革新
  • 完整教程:MySQL全量、增量备份与恢复
  • 10/5
  • 10/4
  • 嵌入式MCU
  • porting perf性能观测工具
  • Windows常用快捷指令
  • Python 在金融中的应用- Part 1 - 教程
  • QBXT2025S刷题 Day4
  • java学习日记9.25
  • porting 开源memtester
  • 计算机的组成
  • 完整教程:用mediamtx搭建简易rtmp,rtsp视频服务器
  • oppoR9m MTK 6755 开启VCOM的9008模式
  • 关于电脑息屏后自动亮屏的的原因排查及解决方式
  • 机器人世界杯工业联赛技术解析
  • Squarepoint Challenge (Codeforces Round 1055, Div. 1 + Div. 2) A~E
  • k8s之基础概念
  • 251005
  • Java基础 Day26 - 详解
  • 14_mklink创建符号链接
  • 7_如何构建知识图谱
  • 点双连通分量例题:矿场搭建
  • MTK oppoR9m Smart Phone flash Tool 提示 ERROR: STATUS_UNSUPPORT_CTRL_CODE (0xC0010004)
  • 我开发的 Chrome 插件 SEO Tools Extension 今天上线了
  • Windows Server部署Vue3+Spring Boot项目 - 实践
  • 深入解析:阿里云无影云桌面深度测评
  • 2025.10.5模拟赛
  • C++/CLI
  • uboot 2020版本下gpio命令的使用