概率DP/期望DP总结

概述

一般来说,概率DP找到正确的状态定义后,转移是比较容易想到的。但状态一定是“可数”的,把有范围的整数作为数组下标。事实上,将问题直接作为状态是最好的。如问“n人做XX事的期望次数”,则设计状态为f[i]表示i个人做完事的期望。转移一般是递推,即从上一个状态转移得(填表)或转移向下一个状态(刷表)。

练习题

涂格子1

n个格子,每次随机涂一个,求涂满m个格子的期望次数。

如概述所说,设计状态f[i]表示涂i个格子期望次数。转移时考虑这次是涂了的还是没涂的,从f[i]和f[i-1]转移来。转移方程为 f [ i ] = i n f [ i ] + n ( i 1 ) n f [ i 1 ] + 1 ( i < m ) i = m 时没有前面那项,因为一旦涂满动作就停止了。

涂格子2

n个格子,每次随机涂一个,求涂m次后期望涂色格子数。

如概述所说,设计状态f[i]表示涂i次后的答案。转移时考虑这次是涂了的还是没涂的。转移方程为 f [ i ] = n ( i 1 ) n ( f [ i 1 ] + 1 ) + i 1 n f [ i 1 ]

小孩和礼物

n 个礼物盒和 m 个小孩,每个盒子里有一个礼物。所有人轮流开盒子,每次打开一个随机盒子,如果里面有礼物就拿走(如果被开过了就没有礼物了)。问所有人拿走礼物的期望数量。

一个礼物=一个打开过的盒子。f[i]表示i个人拿走礼物的期望,相当于表示涂i次期望涂色格子数量。同涂格子2。

麻球繁衍

开始有n个麻球,每天每个麻球会死亡,同时繁衍出若干新麻球。每个麻球繁衍i个麻球的概率是 p [ i ] ( 0 i < k ) 。求在m天内麻球死绝的概率。

每个麻球是互相独立的,设计状态f[i]表示一个麻球i天内死绝的概率,则n个麻球在i天内死亡的概率是 f [ i ] n 。转移时考虑这个麻球第一天繁衍多少个,它们在接下来的 i 1 天内死绝了。转移方程为 f [ i ] = j = 0 k 1 p [ j ] f [ i 1 ] j

亚瑟王的生日庆典

亚瑟王过生,他每天抛一枚硬币,正面向上的概率是 p 。办庆典要花钱,在第 i 天要花 ( 2 i 1 ) 千元。求正面向上数 k 次时的期望花钱数。

f[i]表示正面向上i次的期望花钱。转移时考虑是否掷到正面,容易列出转移 f [ i ] = ( 1 p ) f [ i ] + p f [ i 1 ] + i
需要计算g[i]表示正面向上i次的期望天数,则当天期望开销= 2 × g [ i ] 1 g [ i ] = ( 1 p ) g [ i ] + p g [ i 1 ] + 1

BZOJ4318 OSU!

开始有一个空串,每次添加一个0或1,添加1的概率为 p 。添加完后计算得分,每一段连续极长1段贡献 l e n 3 分。求最后期望得分。

转移时考虑是否增加1,如果增加了一个1,设当前期望连续1个数为 l ,那么答案应该增加 ( l + 1 ) 3 l 3 。因此还需要维护 l l 2 的期望。维护 l 2 时同样考虑答案增加多少。

循环转移处理方法

有些DP方程之间会循环转移。可以高斯消元,或者设每个状态为形如 f [ u ] = a [ u ] f [ f a ] + b [ u ] f [ 0 ] + c [ u ] ,最后求出所有系数。

例题

单人博弈

有三个正多面体骰子,第i个有k[i]面。每次扔全部三个骰子,得到等同于它们的和的分数。如果三个骰子分别掷得a、b、c,则得分清零。求得分≥n时的期望次数。

设f[i]表示得i分的期望次数。转移时考虑三个骰子的和,先算出p[i]表示和为i的概率,p0表示得分清零的概率。用刷表法,转移方程为 f [ i ] = k p [ k ] f [ i + k ] + p 0 f [ 0 ] + 1
我们看到,转移方程是与 f [ 0 ] 有关的。设 f [ i ] = a [ i ] f [ 0 ] + b [ i ] ,则可以解出 a [ i ] b [ i ]

猜你喜欢

转载自blog.csdn.net/myjs999/article/details/81022546