SSLOJ 2883 烽火傳遞

2022-08-26 04:36:11 字數 1738 閱讀 5392

題目

description

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

input

第一行:兩個整數nm。其中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,000wi≤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個烽火台中至少要有乙個發出訊號。請計算總共最少花費多少代價,才能使...