古典概型
Little Pony and Expected Maximum
一个骰子有 m 个面,第 i 个面点数为 i,每一面等概率出现,计算投掷 n 次骰子能获得最大值的期望。
设随机变量 X 是投掷出的最大值,下面有两种方法求出 P(X=i)。
可以枚举最大值的数量 c,并且根据二项式定理合并:
P(X=i)=mn1c=1∑n(cn)(i−1)n−c=mn1(i−1)n(c=0∑n(cn)(i−1)−c−(0n)(i−1)0)=mn1(i−1)n(((i−1)−1+1)n−1)=mnin−(i−1)n
也可以换一种思路,求 P(X≤i) 更简单,因为这只需要在 1∼i 中任意选择数字即可:
P(X≤i)=mnin
因此:
P(X=i)=P(X≤i)−P(X≤i−1)=mnin−(i−1)n
然后,考虑期望的求法:
E[X]=i=1∑mimnin−(i−1)n
所以用快速幂可以做到 O(mlogn)。
期望 DP
给定一个 DAG,每条边 (u,v) 有权值 wu,v,一个人从节点 x 出发,假设当前处于节点 u,则
- 如果没有任何出边,则过程停止;
- 否则,随机走向一个相邻的点 v,概率为 pu,v,并且 ∑vpu,v=1。
求 x 出发到停止走过的总路程的期望。
根据期望的定义,设随机变量 Du 表示路程的长度,我们从终点往前递推,可以得到:
E[Du]=d∑dP(Du=d)=d∑(u,v)∑dP(Dv=d−wu,v)pu,v=(u,v)∑d∑dP(Dv=d−wu,v)pu,v
然后,我们把 d−wu,v 换元为 d′:
E[Du]=(u,v)∑d′∑(d′+wu,v)P(Dv=d′)pu,v=(u,v)∑pu,v(d′∑d′P(Dv=d′)+wu,vd′∑P(Dv=d′))=(u,v)∑pu,v(E[Dv]+wu,v)
这个式子是符合我们的直觉的,即好像是把期望当成一个所谓的真正的值来用。
New Year and Arbitrary Arrangement
给定三个整数 k,pa,pb 以及一个空的序列。
每次随机在这个序列末尾添加字符 a 或者 b,概率分别是 pa+pbpa 以及 pa+pbpb,直到出现 ≥k 个形如 ab 的子序列。
求操作结束时子序列期望出现次数,答案对 109+7 取模。
我们发现这是状态之间的转移,所以考虑以 DP 视角来看。
那怎么设计状态?最无脑的方案当然是 (s,a,b) 表示子序列数量、a 的数量和 b 的数量,接下来我们考虑转移。
dp(s,a,b)←{dp(s,a+1,b)PA=pa+pbpadp(s+a,a,b+1)PB=pa+pbpb
我们发现 b 这个状态在转移的时候并没有影响到别的状态,所以不妨把它扔掉。
dps,a=PAdps,a+1+PBdps+a,a
根据题目要求,当 s≥k 时,dps,a=s。因此当 s+a≥0 时,有:
dps,a=PAdps,a+1+PB(s+a)
这个数列是无穷的,我们可以换个思路,枚举一下后续添加了几个 a 后停止,并且让这个数量取到一个 +∞ 的极限即可。
dps,a=i=0∑+∞PAiPB(s+a+i)=PB((s+a)i=0∑+∞PAi+i=1∑+∞iPAi)=PB(1−PAs+a+(1−PA)2PA)=s+a+PBPA
特殊地,当 a=0 时,(s,0) 会从 (s,0+1),(s+0,0) 这两个状态转移,其中 (s+0,0) 就是它本身,所以我们需要进行特殊处理,移项解方程即可:
dps,0=1−PB1PAdps,1
Fork in the Road
给定一个有向图,保证每个节点都能走到 n。
高桥从 1 开始每次等概率随机选择一条边走。
现在删一条边,使得他到 n 经过边的期望数量最小。
这显然无法通过枚举边后每次重新计算的方式操作。
我们可以看出,如果某个点 u 后面的点已经删过,那么 (u,v) 这些边都不能删;只有当 u 后面的点都没删过它才可以删。
这里用 dpu,0/1 表示 u 后面是否删过对应的最小期望,其中 0 代表没删过,1 代表删过。
对于没删过,它后面也必须没删过。设 du 是 u 的出边数量。
dpu,0=du1v∑(dpv,0+1)
对于删过的,它可能是后面的已经删过,也可能是某个 (u,v) 被删了。
dpu,1=min⎩⎨⎧minv0du−11∑v=v0(dpv,0+1)minv0du1∑v(dpv,[v=v0]+1)
答案是 dp1,1。
Checkpoints
n 个关卡,有一些关卡有存档点,有些没有。
从 1∼n 过关,对于每一个关卡,都相互独立并且通过和失败的概率均为 21。
如果通过关卡 i,则进入关卡 i+1,否则返回最近的、有存档点的关卡 j≤i。关卡 1 一定有存档点。
给定一个 k≤1018,构造出一个 n≤2000 且通过关卡 n 的总次数的期望为 k 的方案,或报告方案不存在。
显然,我们需要推一下,如果已经知道所有的存档点,目标期望的表达式。
假设从 i 开始通关 n 的期望为 Ei,上一个、下一个存档点分别是 l,r 并且满足 l≤i≤r−1。
最后一段
首先来求最后一段,即 r 不存在的情况。设关卡为 l,…,n−1,n。
对于每一个 l≤i≤n−1,都有:
Ei=21(Ei+1+1)+21(El+1)
特别地,对于 i=n,有:
En=21+21(El+1)
从 i=l,l+1,l+2 可以得出一个规律:
El+j−1−El+j=2j
可以列出:
⎩⎨⎧El−El+1El+1−El+2⋯En−1−EnEn=21=22=2n−l=1+21El
因此:
El=21+22+⋯+2n−l+1=2n−l+2−2
前面的段
同样地,我们可以找到上面的规律:
El+j−1−El+j=2j
列出:
⎩⎨⎧El−El+1El+1−El+2⋯Er−1−Er=21=22=2r−l
因此:
El=21+22+⋯+2r−l+Er=2r−l+1−2+Er
合并两种情况
我们发现,无论是在最后一段,还是前面的段,如果我们设一个存档点 j 后没有存档点的数量为 cj,那么 E1=∑j(2cj+2−2)。
当 cj=0 时,贡献为 2;我们可以将其与一个 cj=0 的段一起来看,它们的贡献是 2cj+2,因此所有的 2 的 ≥1 次方的幂都可以构造出来。
我们将 k 看作一个二进制数,那么一定可以用至多 n=O(2log2k) 个数字凑出一个方案。这是显然满足 n≤2000 的。
这里每一段的贡献最小也是 2,所以对于 k 为奇数的情况,是没有方案存在的。