浅谈线段树优化DP

浅谈线段树优化DP

本篇随笔浅谈一下线段树优化DP。


一、关于DP优化的两种方式

DP算法是大家耳熟能详的最优化算法之一。

有的时候,我们设计DP的时候,需要采取措施进行DP优化来适应题目对时间空间的要求。

一般来讲,DP的优化有两种方式:第一种是针对状态设计进行优化。比如滚动数组优化一维。比如0/1背包优化枚举,比如状压和倍增DP等等。

第二种是针对转移过程进行优化,比如一次转移是(O(n))的,卡时间,就想办法通过一些办法把一次转移的时间复杂度降低。

比如,对于一些数列问题,可以通过递推公式进行通项公式的计算,进而做到(O(n) ightarrow O(1))的转移。

还比如说,用一些数据结构维护转移所需的一些信息,以达到优化转移的效果。


二、线段树优化DP的概念

在DP过程中架线段树对DP的转移进行优化,就被叫做线段树优化DP。


三、例题体会

多讲没用,上题。

比如这道:

CF115E Linear Kingdom Races

这道题是很经典的线段树优化DP。设计状态什么的都是次要的。转移的时候,不加优化是一次(O(n)),优化后变成一次(O(log n)),总复杂度变成:(O(nlog n))

通过这道题,我们总结一下线段树优化DP的一半步骤。

一、弄清楚线段树维护的是什么信息。

二、弄清楚线段树维护的信息在转移过程中是否有修改,怎么修改。

三、弄清楚线段树维护的信息在转移过程中是否随状态的更新而改变。

大约就是这样。

原文地址:https://www.cnblogs.com/fusiwei/p/13865689.html