NOIP2010初賽 烽火傳遞 單調佇列詳細整理

2022-05-03 10:48:26 字數 1644 閱讀 2321

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

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

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

乙個數,即最小代價。

1 2 5 6 2

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

先上50分**:

#include#include

#include

using

namespace

std;

const

int n=5e3+10

;const

int inf=2e9;

int n,m,a[n*100

]; int

dp[n][n];

int dfs(int x,int y)

intmain()

前言:

自己對於單調佇列的一點理解:

for(;lm;l++);//

佇列裡一定要有乙個元素且不合法才出隊(刪除前面)

f[i]=f[q[l]]+a[i];//

用隊首來更新當前f[i]的答案

for(;lf[i];r--);//

用當前的f[i]去更新隊尾,使佇列保持單調性(刪除後面)

q[++r]=i;//

進隊

解析:設f[i]表示點燃當前位置烽火台,且前i個滿足要求的最小代價。優化二:同樣因為要選前m個最小的,使用單調佇列,佇列裡存有不超過m個長度單位的值,每次取隊首,進隊時維護佇列使其單調不下降,複雜度將為o(n)。

(這裡主要講解 優化二即單調佇列)

ac**:

#include#include

using

namespace

std;

inline

const

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}const

int n=1e6+10

;int n,m,l,r,a[n],f[n],q[n<<1

];int

main()

int ans=0x7fffffff

;

for(int i=n-m+1;i<=n;i++) ans=min(ans,f[i]);

printf("%d

",ans);

return0;

}

NOIP2010初賽 烽火傳遞

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

NOIP2010普及組初賽試題錯題整理

11 乙個字長為8位的整數的補碼是11111001,則它的原碼是 d a.00000111 b.01111001 c.11111001 d.10000111 分析 二進位制中負數才有補碼,將補碼 1再按位取反,注意第一位保留1.佇列快照是指在某一時刻佇列中的元素組成的有序序列。例如,當元素1 2 3...

noip2010 關押罪犯

s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極 不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨 氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之 間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監...