区间dp

区间dp

概述

区间dp没有什么前置技能,思维难度跨度大,可以出现在NOIP或省选的小题里,需要熟练掌握。

区间dp往往用于处理互相嵌套的区间的问题,我们往往可以先把小的区间做好,然后让大的区间直接调用小区间的子问题进行dp

模式

区间断点

已知数列每个元素的代价和合并两个区间的代价,求整个区间的代价

从小到大枚举长度,再枚举起始点对于一个区间枚举其中的断点,进行操作
状态:f[i][j]=min{f[i][k]+f[k+1][j]+solve(i,j)}
dp复杂度:(Theta(N^3))

区间延伸

区间每次只会编辑两端

从小到大枚举长度,再枚举起始点,每次根据向左端点或右端点延伸转移
状态:f[i][j][0]=f[i+1][j][]+f[i][j-1][]
dp复杂度:(Theta(N^2))

字符串处理

例如求字符串压缩后的最小长度,需要对字符串中重复的部分进行操作

如上枚举区间,再枚举断点合并,再判断当前区间是否符合条件,进行操作
状态:f[i][j]=min{f[i][k]+f[k+1][j]+w(i,j),solve(i,j)}

例题

P1880 [NOI1995]石子合并
P1220 关路灯
P4170 [CQOI2007]涂色
P3205 [HNOI2010]合唱队
P4302 [SCOI2003]字符串折叠
P2470 [SCOI2007]压缩

原文地址:https://www.cnblogs.com/guoshaoyang/p/11296021.html