浅谈线段树优化DP
浅谈线段树优化DP
本篇随笔浅谈一下线段树优化DP。
一、关于DP优化的两种方式
DP算法是大家耳熟能详的最优化算法之一。
有的时候,我们设计DP的时候,需要采取措施进行DP优化来适应题目对时间空间的要求。
一般来讲,DP的优化有两种方式:第一种是针对状态设计进行优化。比如滚动数组优化一维。比如0/1背包优化枚举,比如状压和倍增DP等等。
第二种是针对转移过程进行优化,比如一次转移是\(O(n)\)的,卡时间,就想办法通过一些办法把一次转移的时间复杂度降低。
比如,对于一些数列问题,可以通过递推公式进行通项公式的计算,进而做到\(O(n)\rightarrow O(1)\)的转移。
还比如说,用一些数据结构维护转移所需的一些信息,以达到优化转移的效果。
二、线段树优化DP的概念
在DP过程中架线段树对DP的转移进行优化,就被叫做线段树优化DP。
三、例题体会
多讲没用,上题。
比如这道:
这道题是很经典的线段树优化DP。设计状态什么的都是次要的。转移的时候,不加优化是一次\(O(n)\),优化后变成一次\(O(\log n)\),总复杂度变成:\(O(n\log n)\)。
通过这道题,我们总结一下线段树优化DP的一半步骤。
一、弄清楚线段树维护的是什么信息。
二、弄清楚线段树维护的信息在转移过程中是否有修改,怎么修改。
三、弄清楚线段树维护的信息在转移过程中是否随状态的更新而改变。
大约就是这样。