期望dp和概率dp

概率正着推,期望倒着推。

期望dp

一、无后效性的期望dp

例1.1 Favorite Dice
甩一个n面的骰子,问每一面都被甩到的次数期望是多少。

d p [ i ] dp[i] dp[i]表示目前已经甩到 i i i个数字,从当前状态到每一面都甩到的期望次数。
首先我们知道 d p [ n ] = 0 dp[n]=0 dp[n]=0,因为此时已经每一面都甩到了。

对于 d p [ i ] dp[i] dp[i],当前已经掷出 i i i个字母,掷出重复字母的概率是 i / n i/n i/n,掷出新字母的概率是 ( n − i ) / n (n-i)/n (ni)/n
所以 d p [ i ] = i / n ∗ ( d p [ i ] + 1 ) + ( n − i ) / n ∗ ( d p [ i + 1 ] + 1 ) dp[i]=i/n*(dp[i]+1)+(n-i)/n*(dp[i+1]+1) dp[i]=i/n(dp[i]+1)+(ni)/n(dp[i+1]+1)
结果化简我们可以得到递推式

可能出现的问题:
为什么要+1?
因为从dp[i]到下一个状态需要再掷一次骰子。
为什么当前状态的期望可以由后继状态得到?
由定义 E = ∑ p [ i ] ∗ E [ i ] , ( p [ i ] , E [ i ] 分 别 为 后 继 状 态 的 概 率 和 期 望 ) E=\sum p[i]*E[i],(p[i],E[i]分别为后继状态的概率和期望) E=p[i]E[i],(p[i],E[i])
例1.2 Help Me Escape
师傅被妖怪抓走了。有n个妖怪,每个妖怪有一个固定的战斗力 c i c_i ci,师傅也有一个初始战斗力 f 0 f_0 f0。每天,师傅会随机选择一个妖怪决斗,如果打得赢 ( f t (f_t (ft> c r a n d o m ) c_{random}) crandom),就可以逃出去,逃出去要 t i t_i ti天。否则,师傅会不甘心,当天他会拿出秘籍练功,将自己变强, f ( t + 1 ) = f ( t ) + c r a n d o m f(t+1)=f(t)+c_{random} f(t+1)=f(t)+crandom,第二天寻找下一次机会,问师傅能够逃脱可怕的妖怪。

d p [ F ] dp[F] dp[F]是战斗力为F时,逃离的天数期望。(答案是 d p [ f ] dp[f] dp[f])。则有公式。

d p [ F ] = ∑ ( 1 / n ∗ t i ) , F > c i dp[F]=\sum(1/n * t_i) ,F>c_i dp[F]=(1/nti),F>ci
+ ∑ ( 1 / n ∗ d p [ F + c i ] ) , F < = c i +∑(1/n * dp[F+c_i]) ,F<=c_i +(1/ndp[F+ci]),F<=ci

练习 1.3 Kids and Prizes(题解为白色字体)
排队取,第1个人取到1个,dp[1]=1。后面的人 d p [ i ] = p 取 到 礼 物 盒 子 ∗ ( d p [ i − 1 ] + 1 ) + p 取 到 空 盒 子 ∗ d p [ i − 1 ] dp[i]=p_{取到礼物盒子}*(dp[i-1]+1)+p_{取到空盒子}*dp[i-1] dp[i]=p(dp[i1]+1)+pdp[i1]
练习 1.4 Bloodsucker

(假装这边有题解)

二、有后效性的期望dp

例2.1 One Person Game
最近时间好紧啊感觉干啥都没空又要打个人赛了好紧脏然后就咕咕咕咕咕,本来还打算学后缀数组打算补一补树形dp打算学数位dp的但结果一个都没干成真是头发掉光光

猜你喜欢

转载自blog.csdn.net/solemntee/article/details/114579062