題目
description
烽火台又稱烽燧,是重要的軍事防禦設施,一般建在險要或交通要道上。一旦有敵情發生,白天燃燒柴草,通過濃煙表達資訊;夜晚燃燒乾柴,以火光傳遞軍情,在某兩座城市之間有n個烽火台,每個烽火台發出訊號都有一定代價。為了使情報準確地傳遞,在連續m個烽火台中至少要有乙個發出訊號。請計算總共最少花費多少代價,才能使敵軍來襲之時,情報能在這兩座城市之間準確傳遞。
input
第一行:兩個整數n,m。其中n表示烽火台的個數,m表示在連續m個烽火台中至少要有乙個發出訊號。接下來n行,每行乙個數wi,表示第i個烽火台發出訊號所需代價。
output
一行,表示答案。
5 31 2 5 6 2
4
data constraint
對於50%的資料,m≤n≤1,000。 對於100%的資料,
m≤n≤100,000,wi≤100。
分析
這道很明顯,如果用dp做一定超時,所以我們用單調佇列優化
那該怎麼優化法呢
首先我們分析狀態轉移方程 f[j]=min(f[j],f[k]+a[i])
如果做的是迴圈k 然後直接列舉. o(n^2)
顯然這肯定超時
所以我們就這樣做:
構造乙個遞增單調佇列,所以最小的值一定在隊頭
用單調佇列來代表f裡面的值的
這樣就可以省下k這個迴圈了
但是最後的答案是在i=n-m i<=n 裡
**
1 #include2#define n 100000
3using
namespace
std;
4int a[n+1];5
int f[n+1],que[n+1];6
intmain ()720
int ans=1e9;
21for (int i=n;i>n-m;i--)
22 ans=min(ans,f[i]);
23 cout<24 }
2883 烽火傳遞 動態規劃 單調佇列
烽火台又稱烽燧,是重要的軍事防禦設施,一般建在險要或交通要道上。一旦有敵情發生,白天燃燒柴草,通過濃煙表達資訊 夜晚燃燒乾柴,以火光傳遞軍情,在某兩座城市之間有 n 個烽火台,每個烽火台發出訊號都有一定代價。為了使情報準確地傳遞,在連續 m 個烽火台中至少要有乙個發出訊號。請計算總共最少花費多少代價...
ssl2883 烽火傳遞 單調佇列優化 DP
烽火台又稱烽燧,是重要的軍事防禦設施,一般建在險要或交通要道上。一旦有敵情發生,白天燃燒柴草,通過濃煙表達資訊 夜晚燃燒乾柴,以火光傳遞軍情,在某兩座城市之間有 n 個烽火台,每個烽火台發出訊號都有一定代價。為了使情報準確地傳遞,在連續 m 個烽火台中至少要有乙個發出訊號。請計算總共最少花費多少代價...
烽火傳遞 單調佇列
烽火台又稱烽燧,是重要的軍事防禦設施,一般建在險要或交通要道上。一旦有敵情發生,白天燃燒柴草,通過濃煙表達資訊 夜晚燃燒乾柴,以火光傳遞軍情,在某兩座城市之間有n個烽火台,每個烽火台發出訊號都有一定代價。為了使情報準確地傳遞,在連續m個烽火台中至少要有乙個發出訊號。請計算總共最少花費多少代價,才能使...