單調佇列優化dp

2021-09-26 09:35:32 字數 732 閱讀 4320

形如f[i] = max - wi的問題都可以用單調佇列優化。

例題:板題 , 注意乙個地方 , 求完所有的f後 , ans不是f[n]而是後面的一段字尾的f , 注意字尾的左端點。

很顯然是rmq問題 , 計算字首和sum[i] , 對於固定的右端點 i,我們想讓答案最大等價於max,可以用個單調佇列維護。

但是隨便乙個資料結構直接on log n過去就行。注意邊界。乙個地方往旁邊擴充套件可能沒到p個就<0或》n了 , 要判掉。

二分套dp。

這道題跟烽火傳遞很有相似之處 , 但是最後ans為最大的f而不是某個字尾 ,因為乙個狀態可能到達不了。注意狀態的存在性問題。存在性問題還有、、你是否能從單調佇列裡得到資訊(head<=tail) ,不能得到那麼要被轉移的狀態也是不存在的。

兩道一模一樣的題  ,其實暴力就可以過,但是,這題正解是滾動dp , 我們設f[k][i][j]為到第k個階段走到ij最多做功 , 

只需要看看第k階段的模式 , 然後轉移 。 我們不妨設跑步機向右傾斜 , 那麼f[k][i][j]就可以由f[k-1][i][j-len ~ j]轉移而來 , len表示從k-1階段結束一直到k階段結束你最多能走的步數 , f[k][u] = max = max -v;

也就是說單調佇列裡維護當前行,到當前列的最大的f[k-1][u] + u就行了。本作者草稿紙上把狀態轉移方程寫錯成 f[k][u] = max

然後要重構**。。所以說呢 , 先在草稿紙上寫好轉移方程 和變數取值範圍是很重要的。

單調佇列 優化DP

佇列元素保持單調遞增 減 而保持的方式就是通過插隊,把隊尾破壞了單調性的數全部擠掉,從而使佇列元素保持單調。單調佇列的作用 優化dp。許多單調佇列優化的dp可以使複雜度直接降維,下面就以最簡單的一道題為例 在某兩座城市之間有 n 個烽火台,每個烽火台發出訊號都有一定代價。為了使情報準確地傳遞,在連續...

DP 單調佇列優化

使用單調佇列優化的題目具有這樣的特點,他需要我們維持一段區間內的某個最優值,這個區間是隨著遍歷的順序變化的,但是其變化一定具有這樣的特性,也即維持的區間左右端點一定是單調遞增的,而不能出現回流的現象,否則我們在維持佇列單調性過程中剪枝的資料可能是新的區間中的最大值。維持區間最優值的方法有很多,例如靜...

單調佇列優化DP

這段時間在重溫dp,發現dp中有很大很重要的一塊區域是關於dp優化的,於是來和大家分享一下各種dp優化方法,下面講一下單調佇列優化dp 首先來重溫下什麼是單調佇列,在單調佇列中,每個元素的決策時間單調增而它的決策單調更劣,這就顯然可以明白,最優決策永遠在隊首。如果對上面基礎單調佇列不了解,可以先做 ...