假期 code vs 3622 dp 單調佇列

2021-07-23 02:34:44 字數 1278 閱讀 3255

經過幾個月辛勤的工作,fj決定讓奶牛放假。假期可以在1…n天內任意選擇一段(需要連續),每一天都有乙個享受指數w。但是奶牛的要求非常苛刻,假期不能短於p天,否則奶牛不能得到足夠的休息;假期也不能超過q天,否則奶牛會玩的膩煩。fj想知道奶牛們能獲得的最大享受指數。

第一行:n,p,q.

第二行:n個數字,中間用乙個空格隔開。

乙個整數,奶牛們能獲得的最大享受指數。

水dp

f[i]表示為以第i天為假期的最後一天所奶牛們的最大享受指數。

先用sum陣列求出字首和

f[i]=sum[i]-min(i-q<=k<=i-p)

單調佇列維護單調遞增區間,每次隊首取出最小值。

var

a:array[0..1000001] of longint;

d,v:array[0..1000001] of longint;

f:array[0..1000001] of int64;

sum:array[0..1000001] of int64;

head,tail:longint;

i,j,k:longint;

n,m,nm:longint;

ans:longint;

begin

readln(n,nm,m);

for i:=1

to n do

read(a[i]);

sum[1]:=a[1];

for i:=2

to n do

sum[i]:=sum[i-1]+a[i];

fillchar(d,sizeof(d),0);

fillchar(v,sizeof(v),0);

head:=1;

tail:=0;

for i:=nm to n do

begin

while (v[head]and (head<=tail) do

head:=head+1;

while (sum[i-nm]and (head<=tail) do

tail:=tail-1;

tail:=tail+1;

v[tail]:=i-nm;

f[i]:=sum[i]-sum[v[head]];

end;

ans:=-maxlongint;

for i:=nm to n do

if ansthen ans:=f[i];

write(ans);

end.

codevs 2347 假期的宿舍

2009年省隊選拔賽浙江 時間限制 1 s 空間限制 256000 kb 題目等級 大師 master 學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接...

NKOI 期末賽題D 假期關樓

p3696假期關樓 時間限制 2000ms 空間限制 65536kb 問題描述 暑假到了,大部分學生都回家了,只有少量競賽學生還在學校裡。學校打算逐步把教學樓都關閉。以減少運營成本。學校裡的n棟教學樓 編號1到n 通過m條雙向道路連線起來。每關閉了一棟樓,與該樓相連的所有道路同時都會被關閉。何老闆想...

高二小假期集訓 D5

剛調完了乙個非常噁心的題 可能是我寫的太噁心了 心累 先寫會部落格吧。今天上午該完了考試的三道題,感覺第二道真的是個好題 學長說是經常會遇到的一類題 完了完了 看了乙個小時std才看懂,寫了篇部落格。下午好頹啊,先是學長講課,講tarjan的正確性及一些細節證明 正確性不是顯然的嗎?搞懂了dfn和l...