P1725 琪露諾 單調佇列優化

2022-05-31 13:33:13 字數 842 閱讀 8049

描述:

小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照一種特殊的方式進行移動,當她在格仔i時,她只移動到區間[i+l,i+r]中的任意一格。你問為什麼她這麼移動,這還不簡單,因為她是笨蛋啊。

每乙個格仔都有乙個冰凍指數a[i],編號為0的格仔冰凍指數為0。當琪露諾停留在那一格時就可以得到那一格的冰凍指數a[i]。琪露諾希望能夠在到達對岸時,獲取最大的冰凍指數,這樣她才能狠狠地教訓那只青蛙。

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

開始時,琪露諾在編號0的格仔上,只要她下一步的位置編號大於n就算到達對岸。

題目的意思很裸了。

我們從1開始列舉格仔編號,編號為i的格仔可以由[i-r,i-l]轉移而來

但是這樣寫會超時。

其實我們想,對於列舉到的i,之前的格仔的dp值已經不會再更新了

而我們只關心i-ri-l的最大值

我們完全可以對dp陣列維護乙個單調佇列,這樣轉移的時候可以快速找到最大值來轉移

#include using

namespace

std;

#define max(a,b)(a>b?a:b)

intn,l,r,ans;

int a[400009],dp[400009

];int q[400009],p[400009],pre[400009

]; int

main()

printf("%d

",ans);

}

P1725 琪露諾 dp 單調佇列優化

看了題後不難想到這個題是個dp,而狀態轉移方程為dp i max dp k k i l k i r a i 如果暴力去dp會多了一層 l,r 的迴圈,可能會超時,所以對區間 l,r 進行優化,用單調佇列進行優化。維護區間 l,r 的最大值即可。include typedef long long ll...

P1725 琪露諾 題解(單調佇列)

琪露諾 單調佇列優化的 dp 狀態轉移方程 f i max a i 考慮單調佇列優化。因為剛學,不是很熟悉單調佇列,特寫一篇詳細的解釋。queue 陣列儲存乙個佇列,他的頭部和尾部的下標分別用head和tail表示。f 陣列是 dp 用到的陣列。首先讀入每乙個座標處的價值 a i 列舉 i 從 l ...

洛谷P1725琪露諾 單調佇列優化dp

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