期望dp
期望的线性性
即\(E(x+y)=E(x)+E(y)\)
期望的其它性质(\(C\)是常数)
路径长度 (倒推与期望的线性性)
题目
给定一个起点为\(1\),终点为\(n\)的\(DAG\),每个点走向与他相连的点的概率是相等的,求从\(1\)到\(n\)的路径的期望总长度
题解
-
方法\(1\):倒序\(dp\),适用于终点唯一的情况
我们设\(f[i]\)表示从\(i\)到终点\(n\)的方案数,根据拓扑序的逆序转移,转移方程为
-
方法\(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\)的
- 方法\(2\),我们将状态之间的转移抽象成边,只有 \(f[i][j]\rightarrow f[i+1][j+1]\) 的转移对答案有\(1\)的贡献,然后具体转移与上一道题是同理的
- 方法\(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\) 时,黑板上的数的期望。转移就是
为了优化这个转移,我们可以设 \(g[i]=\sum_{k=1}^{i}f[k]\) ,设 \(h[i]=\sum_{k=1}^{i}f[k]\times (i-k+1)\)
于是有
时间复杂度 \(\mathcal{O}(n)\)
期望收益 (拆分计算非线性期望)
题目
给定一个长为\(n\)的序列,一些位置没有被确定(是o,x的几率各占\(50\%\))。对于一个ox序列,连续 \(a\) 长度的o会带来\(a^2\)的收益,问最终序列的期望收益是多少
\(n\le 10^6\)
题解
一种朴素的解法是,设 \(f[i][j]\) 表示考虑到第 \(i\) 位,连续o的长度是 \(j\) 时的期望收益
当前位是o或x的转移是简单的,当它是?时,转移如下
但是这种方法太劣了,考虑优化。我们知道到 \((x+1)^2-x^2=2x+1\) ,所以设 \(f[i]\) 表示考虑到第 \(i\) 位的期望贡献,\(l[i]\) 表示以\(i\)结尾的极大连续o的期望长度,转移如下
时间复杂度\(\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[i]\)进行高斯消元,解出后,我们类比上文的方法\(2\),对于一条边\(u,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\) 相同颜色的概率,那么很容易写出如下转移
最后计算答案时,讨论首尾相接段同色的长度,那么就有下面的式子
两个 \(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\) 时的期望操作次数,转移可以写成下面这样
直接高斯消元......然后复杂度就爆炸了
然后我们发现问题的关键在于这个dp的过程是成环的,但同时这个转移式中包含的未知数不算多,所以我们在这里考虑换元,设 \(g[i]=f[i]-f[i-1]\) (又是差分大法),那么原式可以写成
左右两式 \(f[i]\) 可以消去,得到 \(g[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\) 时的概率
转移如下
时间复杂度 \(\mathcal O(n^3)\)
posted on 2023-07-24 19:57 star_road_xyz 阅读(82) 评论(0) 编辑 收藏 举报