區間dp筆記

2022-05-05 03:45:08 字數 912 閱讀 3971

區間dp是一類在區間上進行dp的最優問題,一般是根據問題設出乙個表示狀態的dp,可以是二維的也可以是三維的,一般情況下為二維。

然後將問題劃分成兩個子問題,也就是一段區間分成左右兩個區間,然後將左右兩個區間合併到整個區間,或者說區域性最優解合併為全域性最優解,然後得解。

區間dp就是f[i][j]表示i到j的一段區間, 然後去轉移最優值的dp

一段區間表示一段狀態,維護i~j的最優值來轉移。

常見區間dp有:合併石子,破環成鏈類題目

其實對於環形區間dp有乙個對付環的好方法:關於n取模(特殊處理0)!

e.g.能量項鍊

設 f[i,j]為第i到j顆珠子合併的最大能量為max;//對k+1,j,j+1等數字關於m取模

這樣一來,i>j時 合併就是從i到n在回到1再到j

若使用複製一次陣列的方法,時間複雜度為(2*n)^3,空間複雜度為4*n^2

環形取模方法與鏈式區間空間複雜度相同,且無空間浪費,時間複雜度為n^3

求和(e.g.石子合併)

對於求和的區間dp最重要的字首和優化( 要不然就要多花時間在求和上面 ) 這種問題我們先考慮其中最大的區間1---2*n (因為是繞成一圈所以是2*n,2*n的話可以保證在乙個環上所有的區間情況)。

那麼對於最大的區間1---2*n, 首先我們可以知道如果他們只有兩個的話那麼是可以直接合併的, 而且還有乙個條件可以確定,就是當區間中只有乙個元素的時候,答案是0

那麼對於乙個我們不知道答案的區間,計算他的答案有兩個方面

①要求區間和

②要找到一種方法把自己分成兩個區間

分成兩個區間的時候,我們需要知道當前分成這兩個區間之後的最大答案是多少。那麼我們就列舉再**切斷這個大區間讓他變成兩個小區間

於是就推得了狀態轉移方程。 

區間dp學習筆記

定義 區間動態規劃問題一般都是考慮,對於每段區間,他們的最優值都是由幾段更小區間的最優值得到,是分治思想的一種應用,將乙個區間問題不斷劃分為更小的區間直至乙個元素組成的區間,列舉他們的組合 求合併後的最優值。設f i,j 1 i j n 表示區間 i,j 內的數字相加的最小代價最小區間f i,i 0...

區間dp學習筆記

怎麼辦,膜你賽要掛慘了,下午我還在學區間 dp 不管怎麼樣,計畫不能打亂 4 不 4 為啥我一開始就先弄模板呢?因為這東西看模板就能看懂。for int i 2 i len i 列舉區間長度 for int l 1,r l len 1 r n l r 列舉左端點和右端點 以下你可以搞一下事情 for...

演算法筆記 區間dp

1.石子歸併問題 dp i j 表示區間i到j合併所需的最小花費。先求出小區間的最小花費,再轉移到大的區間。轉移方程 dp i j min dp i j dp i k dp k 1 j 初始狀態 dp i i 0 模板 for int i 1 i n i cin a i sum i sum i 1 ...