dp部分总结(单调队列,四边形优化,斜率优化,树形dp)

1、单调队列总结:
形如 这里写图片描述,其中,b[x]随x不降
方括号表示的函数值可以在规划之前全部算出(常量),而用圆括号表示的函数值必须在规划过程中计算得到(变量)。
我们注意到这样一个性质:如果存在两个数j, k,使得j <= k,而且g(k) <= g(j),则决策j是毫无用处的。因为根据b[x]单调的特性,如果j可以作为合法决策,那么k一定可以作为合法决策,又因为k比j要优,(注意:在这个经典模型中,“优”是绝对的,是与当前正在计算的状态无关的),所以说,如果把待决策表中的决策按照k排序的话,则g(k)必然是不降的。
这样,就引导我们使用一个单调队列来维护决策表。对于每一个状态f(x)来说,计算过程分为以下几步:
队首元素出队,直到队首元素在给定的范围中。
此时,队首元素就是状态f(x)的最优决策,
计算g(x),并将其插入到单调队列的尾部,同时维持队列的单调性(不断地出队,直到队列单调为止)。
重复上述步骤直到所有的函数值均被计算出来。不难看出这样的算法均摊时间复杂度是O(1)的。
简单的说:因为b【x】是单调递增的,那么我们枚举的k的起点肯定是越来越大的,所以如果有j<=k且g(k)< g(j)则k必定比j优。
所以步骤就是,除队首,算dp,加队尾。
可做的题:
CDOJ 594,hdu 3401,POJ 1821,POJ 2373,hdu 4362,NOI 2005瑰丽华尔兹
2、四边形优化:在动态规划中,经常遇到形如下式的状态转移方程:
dp(i,j)=min{dp(i,k-1) + dp(k,j)} + w(i,j) (i≤k≤j)
dp(i,j)表示区间[i,j]上的最优值。w(i,j)表示在转移时需要额外付出的代价。

很显然,该方程的时间复杂度为O(N3)。
因此,我们需要通过四边形不等式来优化上述方程。
首先介绍什么是“区间包含的单调性”和“四边形不等式”
区间包含的单调性:
如果对于 i≤i’< j≤j’,有 w(i’,j)≤w(i,j’),那么说明w具有区间包含的单调性。
可以形象理解为如果小区间包含于大区间中,那么小区间的w值不超过大区间的w值。
四边形不等式:
如果对于 i≤i’< j≤j’,有 w(i,j)+w(i’,j’)≤w(i’,j)+w(i,j’),我们称函数w满足四边形不等式。
可以形象理解为两个交错区间的w的和不超过小区间与大区间的w的和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值