洛谷 1725 琪露諾 單調佇列

2021-10-09 01:51:48 字數 2505 閱讀 1087

題目描述

在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。

某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。

小河可以看作一列格仔依次編號為0

00到n

nn,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照一種特殊的方式進行移動,當她在格仔i時,她只移動到區間[i+

l,i+

r]

[i+l,i+r]

[i+l,i

+r]中的任意一格。你問為什麼她這麼移動,這還不簡單,因為她是笨蛋啊。

每乙個格仔都有乙個冰凍指數a[i

]a[i]

a[i]

,編號為0

00的格仔冰凍指數為0

00。當琪露諾停留在那一格時就可以得到那一格的冰凍指數a[i

]a[i]

a[i]

。琪露諾希望能夠在到達對岸時,獲取最大的冰凍指數,這樣她才能狠狠地教訓那只青蛙。

但是由於她實在是太笨了,所以她決定拜託你幫它決定怎樣前進。

開始時,琪露諾在編號0

00的格仔上,只要她下一步的位置編號大於n

nn就算到達對岸。

輸入格式

第1

11行:3

33個正整數n,l

,r

n, l, r

n,l,r第2

22行:n+1

n+1n+

1個整數,第i

ii個數表示編號為i−1

i-1i−

1的格仔的冰凍指數a[i

−1

]a[i-1]

a[i−1]

輸出格式

乙個整數,表示最大冰凍指數。保證不超過231

−1

2^31-1

231−1

輸入樣例

5 2 3

0 12 3 11 7 -2

輸出樣例

11說明/提示

對於60

6060

%的資料:n

<=10

,000

n <= 10,000

n<=1

0,00

0 對於100

10010

0%的資料:n

<

=200

,000

n <= 200,000

n<=2

00,0

00對於所有資料 −1,

000<=a

[i

]<=1

,000

-1,000 <= a[i] <= 1,000

−1,000

<=a

[i]<=1

,000

且1

<=l

<=r

<=n

1 <= l <= r <= n

1<=l

<=r

<=n

解題思路

這題是動態規劃+單調佇列維護,如果設a(i

)a(i)

a(i)

​ 為第i

ii格的冰凍指數,

f (i

)f(i)

f(i)

為跳到第ii格所能獲取的最大冰凍指數,那麼有狀態轉移方程:

f (i

)=ma

x(f(

j)+a

(i)(

i−r≤

j≤i−

l)

)f(i)= max(f(j)+a(i)(i−r≤j≤i−l))

f(i)=m

ax(f

(j)+

a(i)

(i−r

≤j≤i

−l))

然後套進乙個單獨佇列就好了。。。

**

#include

#include

#include

#include

#include

using namespace std;

int n,m,a[

200010

],q[

200010

],f[

200010

],p[

200010

],h,t,l,r,ans=

-2147483600

;int main()

for(int i=n-r+

1;i<=n;i++

) ans=

max(ans,f[i]);

//當i已經等於n或下一步就大於n時更新答案

printf

("%d"

,ans)

;}

洛谷 1725 琪露諾

在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照一種特殊的...

洛谷P1725琪露諾 單調佇列 dp

題目描述 在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照...

洛谷P1725 琪露諾(單調佇列dp)

傳送門 dp方程很簡單啊,dp i max val i 暴力找最大值只有60分,考慮優化,很明顯,用單調佇列維護乙個滑動視窗即可。起點至少是l,答案的 最多是n l。話說單調佇列寫起來好噁心啊。每次都寫不對。還是要多練看來 include define n 200005 using namespac...