概述
一般来说,概率DP找到正确的状态定义后,转移是比较容易想到的。但状态一定是“可数”的,把有范围的整数作为数组下标。事实上,将问题直接作为状态是最好的。如问“n人做XX事的期望次数”,则设计状态为f[i]表示i个人做完事的期望。转移一般是递推,即从上一个状态转移得(填表)或转移向下一个状态(刷表)。
练习题
涂格子1
n个格子,每次随机涂一个,求涂满m个格子的期望次数。
如概述所说,设计状态f[i]表示涂i个格子期望次数。转移时考虑这次是涂了的还是没涂的,从f[i]和f[i-1]转移来。转移方程为 。 时没有前面那项,因为一旦涂满动作就停止了。
涂格子2
n个格子,每次随机涂一个,求涂m次后期望涂色格子数。
如概述所说,设计状态f[i]表示涂i次后的答案。转移时考虑这次是涂了的还是没涂的。转移方程为 。
小孩和礼物
有 个礼物盒和 个小孩,每个盒子里有一个礼物。所有人轮流开盒子,每次打开一个随机盒子,如果里面有礼物就拿走(如果被开过了就没有礼物了)。问所有人拿走礼物的期望数量。
一个礼物=一个打开过的盒子。f[i]表示i个人拿走礼物的期望,相当于表示涂i次期望涂色格子数量。同涂格子2。
麻球繁衍
开始有n个麻球,每天每个麻球会死亡,同时繁衍出若干新麻球。每个麻球繁衍i个麻球的概率是 。求在m天内麻球死绝的概率。
每个麻球是互相独立的,设计状态f[i]表示一个麻球i天内死绝的概率,则n个麻球在i天内死亡的概率是 。转移时考虑这个麻球第一天繁衍多少个,它们在接下来的 天内死绝了。转移方程为 。
亚瑟王的生日庆典
亚瑟王过生,他每天抛一枚硬币,正面向上的概率是 。办庆典要花钱,在第 天要花 千元。求正面向上数 次时的期望花钱数。
f[i]表示正面向上i次的期望花钱。转移时考虑是否掷到正面,容易列出转移
。
需要计算g[i]表示正面向上i次的期望天数,则当天期望开销=
。
。
BZOJ4318 OSU!
开始有一个空串,每次添加一个0或1,添加1的概率为 。添加完后计算得分,每一段连续极长1段贡献 分。求最后期望得分。
转移时考虑是否增加1,如果增加了一个1,设当前期望连续1个数为 ,那么答案应该增加 。因此还需要维护 和 的期望。维护 时同样考虑答案增加多少。
循环转移处理方法
有些DP方程之间会循环转移。可以高斯消元,或者设每个状态为形如 ,最后求出所有系数。
例题
单人博弈
有三个正多面体骰子,第i个有k[i]面。每次扔全部三个骰子,得到等同于它们的和的分数。如果三个骰子分别掷得a、b、c,则得分清零。求得分≥n时的期望次数。
设f[i]表示得i分的期望次数。转移时考虑三个骰子的和,先算出p[i]表示和为i的概率,p0表示得分清零的概率。用刷表法,转移方程为
。
我们看到,转移方程是与
有关的。设
,则可以解出
和
。