区间DP

母题

f[i,j] 表示区间内的信息。

考虑转移就是 f[i,j]=f[i,k]+f[k+1][j]+merge([i,k],[k+1,j])merge 可以用前缀和。

1,2,3 动态规划的题目(CSDN)

1(NO.4)

考虑若两端点相等,那么可以连着,即 ai=aj,f[i][j]f[i+1][j1],还有一种情况类似于上面的直接劈开。

2(NO.5)

比较麻烦,类似于母题,但是需要加一些特殊处理,而且边界。

3(NO.69)

转移有很多。

首先如果 s[i]==s[j],你可以考虑 f[i][j]f[i+1][j],f[i][j1],f[i+1][j1]+1(前两个必选一个,最后一个可选可无)。

其次就是类似于母题的转移。

对于上面那个,可以理解为覆盖的顺序是可以灵活调动的,而第三个并不符合这一点。

AcWing 479. 加分二叉树

这道题是区间DP的灵活运用,表示的是中序遍历对应的区间,众所周知,中序遍历最中间的是根,而且加分时也是以根为分界计算的,所以划分依据就是根的位置。最后通过枚举根的位置划分,dfs找的过程复杂度为 O(n2)(每次找一个根是 O(n))。

P4563 [JXOI2018] 守卫

误导性极强,但是答案的求解是区间,所以是区间DP,右端点不断右移,左端点往回扫。

上下序列

设计很一般,还是考虑每次新加入两个数与 [l,r] 的关系比较、两个数需要相等,重点在于转移的条件(比较繁琐,要逐个检查 k 个,因此设计函数)。

CF149D

状态:基本信息+题目要求的三种颜色

转移:

  1. 边界,l+1=r
  2. 包含。
  3. 并列。

括号序列

CF149D对本题有借鉴意义,转移、状态有一定相似度。我们需要考虑用状态存储几种类型的字符串,然后才能转移,而且转移还要分类在这几类中互相转化。

A 魔力屏障

状态:基本状态+考虑到法力值小加入状态中。
转移考虑两次能量波的使用,合并区间,故用区间DP。

洗车

状态设计上考虑到如果那样设计会出现反悔,所以修改状态。由于会选择这些店中最便宜的一个进行一次消费,所以状态里会增加一维最小值。合并区间时是 [l,p1],{p},[p+1,r]

51nod-3972-战斗队形

本题关键在于如果基本状态交换信息就不能存储,很麻烦,所以我们存储最值,这样就可以方便的往左边和右边扩展,或者同时往两边推进,交换。

总结

左端点倒着枚举,右端点顺着枚举可以保证大区间用到小区间信息时都已经求出

区间 DP,状态必须有区间,基本的题都有边界的处理(如1,3中相等的情况,2中一匹、两匹,以及1,2中合并的处理),当然必不可少的是区间的合并。

发现小区间的答案可以转移到大区间,如果转移可以分类就要分类转移,如果边界的类型不同,可能需要增加一维记录类型。划分点可以是在区间上的,也可以树上的根节点,反正都是中间的部分。

答案求解或者某个点会有提示。

最优解可能用到贪心思维。

状态里除了区间信息如果不够需要增加其他维度,大部分情况下只需要记录区间信息,且普遍复杂度为 O(N3)

难度在于答案的计算或者答案转移的条件判断。

括号序列的题关键:并列、包含两种关系分类转移。
合并区间时有包含当前点(属于左区间或右区间)、当前点单独一部分、刨除当前点的情况,具体情况具体分析。

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17668705.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起