在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。
某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。
小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照一種特殊的方式進行移動,當她在格仔i時,她只移動到區間[i+l,i+r]中的任意一格。你問為什麼她這麼移動,這還不簡單,因為她是笨蛋啊。
每乙個格仔都有乙個冰凍指數a[i],編號為0的格仔冰凍指數為0。當琪露諾停留在那一格時就可以得到那一格的冰凍指數a[i]。琪露諾希望能夠在到達對岸時,獲取最大的冰凍指數,這樣她才能狠狠地教訓那只青蛙。
但是由於她實在是太笨了,所以她決定拜託你幫它決定怎樣前進。
開始時,琪露諾在編號0的格仔上,只要她下一步的位置編號大於n就算到達對岸。
第1行:3個正整數n, l, r
第2行:n+1個整數,第i個數表示編號為i-1的格仔的冰凍指數a[i-1]
乙個整數,表示最大冰凍指數。保證不超過2^31-1
輸入
523
012311
7-2
輸出11
對於60%的資料:n <= 10,000
對於100%的資料:n <= 200,000
對於所有資料 -1,000 <= a[i] <= 1,000且1 <= l <= r <= n
用單調佇列+dp 解決。
設定乙個l~r的視窗,單調遞減求出每個視窗裡的最大數f[e
.fro
nt()
]f[e.front()]
f[e.fr
ont(
)],f[i
]=a[
i]+f
[e.f
ront
()],
l<=i
<=n
f[i]=a[i]+f[e.front()] ,l<=i<=n
f[i]=a
[i]+
f[e.
fron
t()]
,l<=i
<=n
!注意:
加入佇列裡的數一定是可以到達的,如樣例裡的第二個數12是不可能到的,所以不能加進佇列裡。
#include
#include
#include
using
namespace std;
long
long n,x,y,a[
300001
],f[
300001
],t[
300001
],ans=
-21474836470
;deque<
long
long
> e;
intmain()
if(!e.empty()
)}cout<}
洛谷P1725 琪露諾
在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照一種特殊的...
洛谷 P1725 琪露諾
題目鏈結 在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照...
洛谷P1725 琪露諾
本人第乙個單調佇列優化 dp 不鼓勵鼓勵?琪露諾這個題,dp 還是挺好想的對不,但是暴力 dp 的話會 tle 所以我們考慮用單調佇列優化。原題中說她只移動到區間 i l,i r 中的任意一格,所以我們單調佇列在轉移的時候 push 的應該是 dp i l 而不是 dp i 對於每一段區間,我們用起...