感覺可以用單調佇列優化dp的模型還是挺活的,開個隨筆記錄一些遇到的比較有代表性的模型,斷續更新。主要做乙個收集整理總結工作。
poj - 1821 fence,比較適合入門的題,寫出轉移方程後可以比較容易的看出決策變數的取值範圍的界是單調製化的,以及價值拆開之後也是單調的
#include#include#include#define dd(x) cout<<#x<<" = "const int maxn=2e4+10,mod=1e9+7,inf=0x3f3f3f3f;
struct node
a[maxn];
bool cmp(node x,node y)
for (int j=1;j<=n;++j)
}else
// 賣
h=t=0;
q[0]=maxp;
for (int j=maxp-1;j>=0;--j)}}
int ans=-inf;
for (int i=0;i<=maxp;++i)
ans=max(ans,f[n][i]);
printf("%d\n",ans);
}return 0;
}
單調佇列 優化DP
佇列元素保持單調遞增 減 而保持的方式就是通過插隊,把隊尾破壞了單調性的數全部擠掉,從而使佇列元素保持單調。單調佇列的作用 優化dp。許多單調佇列優化的dp可以使複雜度直接降維,下面就以最簡單的一道題為例 在某兩座城市之間有 n 個烽火台,每個烽火台發出訊號都有一定代價。為了使情報準確地傳遞,在連續...
單調佇列優化dp
形如f i max wi的問題都可以用單調佇列優化。例題 板題 注意乙個地方 求完所有的f後 ans不是f n 而是後面的一段字尾的f 注意字尾的左端點。很顯然是rmq問題 計算字首和sum i 對於固定的右端點 i,我們想讓答案最大等價於max,可以用個單調佇列維護。但是隨便乙個資料結構直接on ...
DP 單調佇列優化
使用單調佇列優化的題目具有這樣的特點,他需要我們維持一段區間內的某個最優值,這個區間是隨著遍歷的順序變化的,但是其變化一定具有這樣的特性,也即維持的區間左右端點一定是單調遞增的,而不能出現回流的現象,否則我們在維持佇列單調性過程中剪枝的資料可能是新的區間中的最大值。維持區間最優值的方法有很多,例如靜...