Jzoj1771 烽火傳遞 單調佇列優化dp

2021-08-22 07:21:56 字數 956 閱讀 7541

烽火台又稱烽燧,是重要的軍事防禦設施,一般建在險要或交通要道上。一旦有敵情發生,白天燃燒柴草,定代價。

為了使情報準確地傳遞,在連續m個烽火台中至少要有乙個發出訊號。請計算總共最少花費多少代價,才能使敵軍來襲之時,情報能在這兩座城市之間準確傳遞。

【輸入格式】

第一行:兩個整數n,m。其中n表示烽火台的個數,m表示在連續m個烽火台中至少要有乙個發出訊號。

接下來n行,每行乙個數wi,表示第i個烽火台發出訊號所需代價。

【輸出格式】

一行,表示答案。

【輸入樣例1】

5 3

1 2

5 6

2 【輸出樣例1】

4 【資料範圍】

對於50%的資料,m≤n≤1,000。

對於100%的資料,m≤n≤ 100,000,wi≤100。

設dp[i]表示前i個烽火台且第i個烽火台點火的最少代價。

那麼,dp[i]=dp[i-j]+a[i],1<=j<=m.

看資料範圍,擺明了要你用單調佇列優化。

常規操作一波即可。

沒有許可權,交不了,但樣例過了,哈哈哈= =不管了。

#include 

#define inf 0x3f3f3f3

using

namespace

std;

const

int maxn=1e5+7;

int que[maxn],a[maxn];

int n,m;

int dp[maxn];

int main()

int ans=inf;

for(int i=n;i>=n-m+1;i--)

ans=min(ans,dp[i]);

printf("%d\n",ans);

}return

0;}

烽火傳遞 單調佇列

烽火台又稱烽燧,是重要的軍事防禦設施,一般建在險要或交通要道上。一旦有敵情發生,白天燃燒柴草,通過濃煙表達資訊 夜晚燃燒乾柴,以火光傳遞軍情,在某兩座城市之間有n個烽火台,每個烽火台發出訊號都有一定代價。為了使情報準確地傳遞,在連續m個烽火台中至少要有乙個發出訊號。請計算總共最少花費多少代價,才能使...

《單調佇列》3 烽火傳遞

正如度娘說了 由於單調佇列的隊頭每次一定最小值,故查詢為o 1 進隊出隊稍微複雜點 進隊時,將進隊的元素為e,從隊尾往前掃瞄,直到找到乙個不大於e的元素d,將e放在d之後,捨棄e之後的所有元素 如果沒有找到這樣乙個d,則將e放在隊頭 此時佇列裡只有這乙個元素 出隊時,將出隊的元素為e,從隊頭向後掃瞄...

烽火傳遞 單調佇列 DP

描述 烽火台又稱烽燧,是重要的防禦設施,一般建在險要處或交通要道上。一旦有敵情發生,白天燃燒柴草,通過濃煙表達資訊 夜晚燃燒乾柴,以火光傳遞軍情。在某兩座城市之間有n個烽火台,每個烽火台發出訊號都有一定的代價。為了使情報準確的傳遞,在m個烽火台中至少要有乙個發出訊號。現輸入n m和每個烽火台發出的訊...