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