期望dp

期望的线性性

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

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

E(C)=cE(Cx)=CE(x)当X与Y互相独立,E(xy)=E(x)E(y)

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

题目

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

题解

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

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

f[u]=vconnect(u)f[v]+wdegv

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

    那么我们如何计算f[u]呢?显然f[1]=1,接下来我们按拓扑序进行转移f[v]f[u]degu即可

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

题目

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

1n,t2000,0p1

题解

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

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

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

题目

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

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

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

n5×105

题解

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

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

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

f[i]=1ik=1if[ik]×k

为了优化这个转移,我们可以设 g[i]=k=1if[k] ,设 h[i]=k=1if[k]×(ik+1)

于是有

f[i]=1i×h[i1]h[i]=h[i1]+g[i]

时间复杂度 O(n)

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

题目

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

n106

题解

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

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

{f[i][j]0.5×(f[i1][j1]+1)f[i][0]kf[i1][k]

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

{f[i]=f[i1]+l[i1]×2+1,l[i]=l[i1]+1 (o)f[i]=f[i1],l[i]=0 (x)f[i]=f[i1]+l[i1]×2+12,l[i]=l[i1]+12 (?)

时间复杂度O(n)

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

题目

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

题解

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

线性转移即可

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

题目

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

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

题解

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

f[u]={vconnect(u)f[v]degv+1   (u=1)vconnect(u)f[v]degv   (2un)

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

f[u]degu+f[v]degv

时间复杂度O(n3)

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

题目

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

n200,m1×109

题解

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

{f[i][0]f[j][0]×p[ij]×(ij)×m2mf[i][0]f[j][1]×p[ij]×(ij)×m1mf[i][1]f[j][0]×p[ij]×(ij)×1m

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

ans=i=0n1f[i][0]×(ni)×(ni)×p[ni]

两个 ni 分别表示位置和贡献

时间复杂度 O(n2)

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

题意

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

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

求期望操作次数

1n105,1kn

题解

这道题太妙了

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

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

f[i]=(f[i1]+1)×in+(f[i+1]+1)×nii

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

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

f[i]=(f[i]g[i]+1)×in+(f[i]+g[i+1]+1)×nin

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

g[i]=(ni)×g[i+1]+ni

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

时间复杂度 O(nn)

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

题目

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

n200

题解

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

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

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

转移如下

f[i][j][k]{f[i+1][j+1][max(k,j+1)]   (选择0)f[i+1][j][k+1]   (选择1)

时间复杂度 O(n3)

posted on   star_road_xyz  阅读(92)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示