虽然我知道写了这篇总结之后说不定我还是不会期望dp,但是还是要收个尾,至少形式上要来一下,况且万一写着写着就想通了呢?
先说一说如何求概率和期望:
概率:到达当前状态的概率等于到达前驱状态的概率乘以到达当前状态的概率,即dp[now]=Σ(dp[pre]*p[pre][now])。
期望:当前状态的期望等于所有{后继状态的输出值(期望)乘以其到达它的概率}之和,即E[now]=Σ(p1*E[nxt1]+p2*E[nxt2]+p3*E[nxt3]+...+pk*E[nxtk])。(可以理解为加权平均值)举个例子,一共10张牌,有7张能造成1的收益,有3张能造成-1的收益,那么抽一次牌的期望收益为(7/10)*1+(3/10)*(-1)=0.4。
关于什么全期望/全概率公式啊什么的就去百度吧,这里不再赘述。
下面结合自己的理解以及数学一本通上的相关概括,总结一下解决期望问题的方法:
1.能化简式子O(1)求的就不废话了
2.不能写出通式的考虑采用递推解决
3.带有决策并且满足最优子结构的期望问题采用动态规划解决
4.一些状态能构成图的期望问题,如果只能列出了线性方程组,可以考虑用高斯消元(O(n^3))解决
下面回顾一下做过的几道OJ上的题(校内赛的由于本蒟蒻懒得粘题面就算了),这里只附题面和简短题解,后面的链接是对每个题目的专门题解(也不一定有多详细。。。):
bzoj 1419 简单题(滚动数组优化)
题意:
桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。
题解:
比较简单的dp,正推倒推均可(状态定义不同)。
设f[i][j]表示已经使用了i张红牌,j张黑牌的最大期望收益。
转移方程:f[i][j]=max(0.0,1.0*i/(i+j)*(f[i-1][j]+1)+1.0*j/(i+j)*(f[i][j-1]-1))
边界:f[i][0]=i
详解:http://blog.csdn.net/kgv093/article/details/78386235
bzoj 4008 整体设计状态
题意:
给出n个技能,每个技能按输入顺序有p[i]的概率释放并造成d[i]的伤害。每轮游戏只能发动一个技能,问r轮游戏一共能造成的伤害期望。
题解:
因为单独考虑每一轮很难设计出无后效性的状态(反正我是没想出来~~~于是看题解),将每一轮合(ho)在一起考虑。
设f[i][j]表示第i个技能有j次机会的概率。
详解:http://blog.csdn.net/kgv093/article/details/78385788
bzoj 3036 模板题
题意:
在一张DAG上,给定起点终点,从一个点出发走向其所有子节点的概率相等,问期望走的路径总长。
题解:
正好每个节点对应一个状态,按照期望的定义式去推,完美的模板题。
详解:http://blog.csdn.net/kgv093/article/details/78385748
bzoj 4318 间接表示期望(记录增量最后相加)
题意:
给定一个长度为n的0/1串,第i个位置为1的概率为a[i],最终得分为01串中所有连在一起1的长度的立方和,求得分的期望
题解:
维护当前位为1的贡献相对上一位的一次方增量f[i]、平方增量g[i]、立方增量h[i]。(具体实现要用到初中数学公式(和的平方/立方))
因为记录的是增量,所以最后还要再加一遍。
详解:http://blog.csdn.net/kgv093/article/details/78384485
poj 3682 辅助数组处理(先求期望次数再求花费)
题意:
亚瑟王掷一枚硬币,正面向上的概率为p,反面朝上的概率为1-p,现在需要掷k次正面朝上,第i次掷硬币时花费2∗i−1。问:达到k次正面朝上时的期望次数以及期望花费。
设g[i]表示已经有i次正面,要到k次的期望次数。
g[i]=g[i+1]+1/p
设f[i]表示已经有i次正面,要到k次的期望花费。
列出转移式移项化简即可,此处不放详细过程,强制自己在复习时再次推导。
边界f[k]=0。
已经开始有点难度了。。。详解:http://blog.csdn.net/kgv093/article/details/78383918
zoj 3640 记忆化搜索
题意:
某一个人,初始战斗值为f,面临着n条道路,每一条道路有一个困难程度ti,和锻炼值ci。每一天他会等概率地选择一条道路,如果他的战斗值大于c[i],那么他会花t[i]的天数走出去,否则他走不出去,但是战斗值增加ti。t[i]与c[i]满足给定的关系(相当于也给出了)。给出n,f,c[i],问走出去的期望天数。
题解:
设dp[i]表示。。。自己想。。。现在都告诉是一维的应该不困难了。
详解:http://blog.csdn.net/kgv093/article/details/78383893
bzoj 3450 水题
题意:略
题解:
有点像bzoj 4318(立方期望)那题,只不过这次存的不是增量,这次1~i期望是啥f[i]就存啥。
详解:http://blog.csdn.net/kgv093/article/details/78365764
bzoj 1426 数学推导与期望的完美演绎
~~~我觉得这题要是第一次就不看题解自己推出来,那你期望这一板块可以毕业了~~~
题意:
有n种邮票,第i次买邮票要花i元,每次买到任意一张的概率都是1/n,问买齐n种邮票的期望花费。
题解:
有点像poj 3682,不过还要难一些,推导巨长代码贼短。还是先求期望次数再求期望花费。
详解:http://blog.csdn.net/kgv093/article/details/78365130
好像有一道很多人力荐的题目本蒟蒻还没做--bzoj 3143游走,需要用高斯消元解决,尽快完成后附上题解。
最后附上3道水题送给像一周前的我一样naive的刚入门的OIer(详细题解在本蒟蒻的dp栏目中):
hdu 4405
hdu 3853
poj 2096
就这么多了,要是这么搞下来考到期望dp还不会就认了。