期望dp

期望的线性性

\(E(x+y)=E(x)+E(y)\)

期望的其它性质(\(C\)是常数)

\[E(C)=c\\ E(Cx)=CE(x)\\ \text{当X与Y互相独立},E(xy)=E(x)E(y) \]

路径长度 (倒推与期望的线性性)

题目

给定一个起点为\(1\),终点为\(n\)\(DAG\),每个点走向与他相连的点的概率是相等的,求从\(1\)\(n\)的路径的期望总长度

题解

  1. 方法\(1\):倒序\(dp\),适用于终点唯一的情况

    我们设\(f[i]\)表示从\(i\)到终点\(n\)的方案数,根据拓扑序的逆序转移,转移方程为

\[f[u]=\sum_{v\in \text{connect}(u)}\frac{f[v]+w}{\deg v} \]

  1. 方法\(2\):利用期望的线性性计算,设 \(f[i]\) 表示点 \(i\) 期望被经过的次数,我们只需要计算每一条边被计算的次数即可,如果点 \(u\) 期望被经过的次数为 \(f[u]\) ,那么边 \((u,v,w)\) 期望被经过的次数就为 \(\frac{f[u]}{\deg u}\) ,对答案的贡献就乘上 \(w\) 加起来就行了。

    那么我们如何计算\(f[u]\)呢?显然\(f[1]=1\),接下来我们按拓扑序进行转移\(f[v]\leftarrow \frac{f[u]}{\deg u}\)即可

乘坐电梯 (利用期望的定义求解)

题目

\(n\)个人排成一列,每秒中队伍最前面的人有\(p\)的概率走上电梯(一旦走上就不会下电梯),或者有\(1−p\)的概率不动。问你\(T\)秒过后,在电梯上的人的期望。

\(1\le n, t\le 2000, 0\le p\le 1\)

题解

我们设\(f[i][j]\)表示第\(i\)个时刻电梯上有\(j\)个人的期望

  1. 方法\(1\),我们的结束状态并不一定,因此是没有办法使用上一道题的方法\(1\)
  2. 方法\(2\),我们将状态之间的转移抽象成边,只有 \(f[i][j]\rightarrow f[i+1][j+1]\) 的转移对答案有\(1\)的贡献,然后具体转移与上一道题是同理的
  3. 方法\(3\),直接利用期望的定义进行 \(dp\) 。我们直接将上面状态的期望改为概率,那么就有转移 \(f[i+1][j+1]\leftarrow f[i][j]\times p,f[i+1][j]\leftarrow f[i][j]\times (1-p)\) ,答案就是 \(\sum_{0\le k\le n}f[T][k]\times k\) ,也就是定义法 \(E(x)=P(x)*x\)

NOIP四校联测 Day1 T1 (多数组优化转移)

题目

给定一个整数 \(n\) ,表示开始时手上的数,初始黑板上的数为 \(1\)

现在进行若干次操作,假设当前手上的数为 \(m\) 每次选择一个 \(i\in [1,m]\) ,让黑板上的数字乘 \(k\) 的同时,让手上的数变为 \(m-i\) ,当这个数变为 \(0\) 的时候停止操作

求出黑板上的数的最大值和期望大小

\(n\le 5\times 10^5\)

题解

首先这道题不能当成一个整数划分来做,因为每种情况并不是等概率(笔者赛时 \(\text{SB}\) 愣是算了 \(1\) 个小时都没算对样例)

对于第一问,根据打表,通过观察,如果一个数 \(\le 4\) ,我们将它分成若干个 \(2\)\(3\) 的乘积,结果一定不会变劣。再考虑每有 \(3\)\(2\) ,我们就可以把它换成 \(2\)\(3\) ,一定会变优。因此这一问就根据模 \(3\) 的余数分一下类就行了

对于第二问,设 \(f[i]\) 表示手上的数是 \(i\) 时,黑板上的数的期望。转移就是

\[f[i]=\frac{1}{i}\sum_{k=1}^{i}f[i-k]\times k \]

为了优化这个转移,我们可以设 \(g[i]=\sum_{k=1}^{i}f[k]\) ,设 \(h[i]=\sum_{k=1}^{i}f[k]\times (i-k+1)\)

于是有

\[f[i]=\frac{1}{i}\times h[i-1]\\ h[i]=h[i-1]+g[i] \]

时间复杂度 \(\mathcal{O}(n)\)

期望收益 (拆分计算非线性期望)

题目

给定一个长为\(n\)的序列,一些位置没有被确定(是o,x的几率各占\(50\%\))。对于一个ox序列,连续 \(a\) 长度的o会带来\(a^2\)的收益,问最终序列的期望收益是多少

\(n\le 10^6\)

题解

一种朴素的解法是,设 \(f[i][j]\) 表示考虑到第 \(i\) 位,连续o的长度是 \(j\) 时的期望收益

当前位是o或x的转移是简单的,当它是?时,转移如下

\[\begin{cases} f[i][j]\leftarrow 0.5\times (f[i-1][j-1]+1)\\f[i][0]\leftarrow \sum_k f[i-1][k] \end{cases} \]

但是这种方法太劣了,考虑优化。我们知道到 \((x+1)^2-x^2=2x+1\) ,所以设 \(f[i]\) 表示考虑到第 \(i\) 位的期望贡献,\(l[i]\) 表示以\(i\)结尾的极大连续o的期望长度,转移如下

\[\begin{cases} f[i]=f[i-1]+l[i-1]\times 2+1,l[i]=l[i-1]+1~(o)\\f[i]=f[i-1],l[i]=0~(x)\\f[i]=f[i-1]+\frac{l[i-1]\times 2+1}{2},l[i]=\frac{l[i-1]+1}{2}~(?) \end{cases} \]

时间复杂度\(\mathcal O(n)\)

P1654 OSU! (拆分计算非线性期望)

题目

对于每一个序列,每个位置为 \(o\) 的概率为 \(p_i\) ,为 \(x\) 的概率为\(1-p_i\) ,对于一个 \(ox\) 序列,连续\(a\)长度的\(o\) 会得到 \(a^3\) 的收益,问最终得到\(ox\)序列的期望收益是多少?

题解

同上一题的思路,我们仍然考虑每一个位置的贡献。根据\((x+1)^3-x^3=3x^2+3x+1\),所以我们维护\(l_1[i]\)为最大连续\(o\)期望长度,\(l_2[i]\)为长度的平方。

线性转移即可

[HNOI2013]游走 (高斯消元求解图上带环dp)

题目

给定一个 \(n\) 个点 \(m\) 条边的无向连通图,顶点从 \(1\) 编号到 \(n\),边从 \(1\) 编号到 \(m\)

小 Z 在该图上进行随机游走,初始时小 Z 在 \(1\) 号顶点,每一步小 Z 以相等的概率随机选择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小 Z 到达 \(n\) 号顶点时游走结束,总分为所有获得的分数之和。 现在,请你对这 \(m\) 条边进行编号,使得小 Z 获得的总分的期望值最小

题解

我们考虑一个贪心,期望经过次数最多的边我们给它标最小的号,于是问题就变成了求解从\(1\)号点出发,期望经过每个边的次数,我们设 \(f[i]\) 表示,到点\(i\)的期望次数,考虑写出转移方程

\[f[u]= \begin{cases} \sum_{v\in \text{connect}(u)}\frac{f[v]}{\deg v}+1~~~(u=1)\\\sum_{v\in \text{connect}(u)}\frac{f[v]}{\deg v}~~~(2 \le u \le n) \end{cases} \]

由于转移关系会成环,我们无法直接进行递推求解,所以接下来,我们对\(f[i]\)进行高斯消元,解出后,我们类比上文的方法\(2\),对于一条边\(u,v\),它的期望经过次数为

\[\frac{f[u]}{\deg u}+\frac{f[v]}{\deg v} \]

时间复杂度\(\mathcal O(n^3)\)

BZOJ 2201 彩色圆环 (期望的线性性+一类环上dp)

题目

给你一个长度为 \(n\) 的圆环,用 \(m\) 种颜色染色,求同色颜色段长度乘积的期望

\(n\le 200 ,m\le 1\times 10^9\)

题解

如果没有环,那么直接设 \(f[i]\) 表示考虑到长度为 \(i\) 的段时的期望值,由于环的存在,我们需要额外讨论环的首尾,所以更改状态为 \(f[i][0/1]\) 表示考虑到长度为 \(i\) 的段,当前点与环首尾颜色不同/相同时的期望值,设 \(p[x]\) 表示连续 \(x\) 相同颜色的概率,那么很容易写出如下转移

\[\begin{cases} f[i][0]\leftarrow f[j][0]\times p[i-j]\times (i-j)\times \frac{m-2}{m}\\f[i][0]\leftarrow f[j][1]\times p[i-j]\times (i-j)\times \frac{m-1}{m}\\f[i][1]\leftarrow f[j][0]\times p[i-j]\times (i-j)\times \frac{1}{m} \end{cases} \]

最后计算答案时,讨论首尾相接段同色的长度,那么就有下面的式子

\[ans=\sum_{i=0}^{n-1}f[i][0]\times (n-i)\times (n-i)\times p[n-i] \]

两个 \(n-i\) 分别表示位置和贡献

时间复杂度 \(\mathcal O(n^2)\)

Ybtoj 金牌导航 关灯游戏 (期望dp+换元去环)

题意

有一个长度为 \(n\) 的 01 串。对位置 \(x\) 操作会使所有编号为 \(x\) 的约数的位置异或上1。我们采取如下策略来让所有的位置变成0:

先随机操作若干次,当当前局面可以在 \(k\) 次操作以内归零时就使用最优策略

求期望操作次数

\(1\le n\le 10^5,1\le k\le n\)

题解

这道题太妙了

最优策略是显然的,因为一个数改变只会影响它的约数,所以从大到小枚举约数即可

一开始的想法是,设 \(f[i]\) 表示从当前局面到归零的操作次数是 \(i\) 时的期望操作次数,转移可以写成下面这样

\[f[i]=(f[i-1]+1)\times \frac in+(f[i+1]+1)\times \frac{n-i}i \]

直接高斯消元......然后复杂度就爆炸了

然后我们发现问题的关键在于这个dp的过程是成环的,但同时这个转移式中包含的未知数不算多,所以我们在这里考虑换元,设 \(g[i]=f[i]-f[i-1]\) (又是差分大法),那么原式可以写成

\[f[i]=(f[i]-g[i]+1)\times \frac in +(f[i]+g[i+1]+1)\times \frac{n-i}n \]

左右两式 \(f[i]\) 可以消去,得到 \(g[i]\) 的递推式如下

\[g[i]=\frac{(n-i)\times g[i+1]+n}{i} \]

假设从初始状态归零的最少操作次数为 \(m\) 然后利用 \(g\) 推出 \(f[m]\),按照题目要求处理一下即可

时间复杂度 \(\mathcal O(n\sqrt n)\)

代码源省选班 最长不下降序列 (交换答案与状态)

题目

求一个长度为 \(n\) 的随机0/1序列的最长不下降序列的长度期望

\(n\le 200\)

题解

这个题的状态在赛时想了好久 (太菜了)

难点在于,当 \(0\) 的数量足够多时会使得当前以 \(1\) 结尾的最长不下降子序列发生改变,因此我们要把它记在状态里

\(f[i][j][k]\) 表示考虑到第 \(i\) 位,目前有 \(j\)\(0\) ,当前最长不下降子序列长度为 \(k\) 时的概率

转移如下

\[f[i][j][k] \rightarrow \begin{cases} f[i+1][j+1][\max(k,j+1)]~~~(\text{选择}0)\\f[i+1][j][k+1]~~~(\text{选择}1) \end{cases} \]

时间复杂度 \(\mathcal O(n^3)\)

posted on 2023-07-24 19:57  star_road_xyz  阅读(69)  评论(0编辑  收藏  举报

导航