單調佇列 DP

2021-06-21 06:04:51 字數 942 閱讀 8455

烽火傳遞

description  

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

input format

第一行有兩個數n,m分別表示n個烽火台,在m個烽火台中至少要有乙個發出訊號。

第二行為n個數,表示每乙個烽火台的代價。

output format      一

個數,即最小代價。       

樣例5 31 2 5 6 2

4時間限制 time limitation    

各個測試點1s

注釋 hint      

1<=n,m<=1,000,000

表示被這題坑了快3個多小時了,主要還是dp沒學好啊,最後乙個for迴圈很巧妙,之前想了好久都沒想到這點,還用了兩個單調佇列。。。悲劇阿。。。

#include #include #include #include #include #define max ((1<<31)-1)

using namespace std;

int value[1000010],q[1000010],dp[1000010]=;

int main()

// for(i=1;i<=n;i++)

// printf("%d\n",dp[i]);

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

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

return 0;

}

單調佇列DP 斜率DP

考慮到知識點是單調佇列,考慮怎麼使用單調佇列 首先說明一點,小天使可以選擇當前時刻鋼琴是否移動 並非一次就要一段時間 考慮dp方程,由於每次只能走乙個方向,選擇不了,其實就相當於乙個一維的dp了 以往上 北 為例 t為第t段時間 f t i j max 變形為 f t i j max i 然後把 f...

dp單調佇列(詳解)

我們從最簡單的問題開始 給定乙個長度為n的整數數列a i i 0,1,n 1和窗長度k.要求 f i max,i 0,1,n 1 問題的另一種描述就是用乙個長度為k的窗在整數數列上移動,求窗裡面所包含的數的最大值。解法一 很直觀的一種解法,那就是從數列的開頭,將窗放上去,然後找到這最開始的k個數的最...

單調佇列 優化DP

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