淺談線段樹優化DP


淺談線段樹優化DP

本篇隨筆淺談一下線段樹優化DP。


一、關於DP優化的兩種方式

DP算法是大家耳熟能詳的最優化算法之一。

有的時候,我們設計DP的時候,需要采取措施進行DP優化來適應題目對時間空間的要求。

一般來講,DP的優化有兩種方式:第一種是針對狀態設計進行優化。比如滾動數組優化一維。比如0/1背包優化枚舉,比如狀壓和倍增DP等等。

第二種是針對轉移過程進行優化,比如一次轉移是\(O(n)\)的,卡時間,就想辦法通過一些辦法把一次轉移的時間復雜度降低。

比如,對於一些數列問題,可以通過遞推公式進行通項公式的計算,進而做到\(O(n)\rightarrow O(1)\)的轉移。

還比如說,用一些數據結構維護轉移所需的一些信息,以達到優化轉移的效果。


二、線段樹優化DP的概念

在DP過程中架線段樹對DP的轉移進行優化,就被叫做線段樹優化DP。


三、例題體會

多講沒用,上題。

比如這道:

CF115E Linear Kingdom Races

這道題是很經典的線段樹優化DP。設計狀態什么的都是次要的。轉移的時候,不加優化是一次\(O(n)\),優化后變成一次\(O(\log n)\),總復雜度變成:\(O(n\log n)\)

通過這道題,我們總結一下線段樹優化DP的一半步驟。

一、弄清楚線段樹維護的是什么信息。

二、弄清楚線段樹維護的信息在轉移過程中是否有修改,怎么修改。

三、弄清楚線段樹維護的信息在轉移過程中是否隨狀態的更新而改變。

大約就是這樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM