洛古P1725(DP 單調佇列)

2021-08-26 02:46:37 字數 1072 閱讀 1755

題意

有0~n這樣的n+1個位置,每個位置都有乙個權值,乙個人在這個位置就會獲得這個位置的權值a[i]。

乙個人最開始在0位置權值為0,假設他現在在i,他下一步只能走到[i+l, i+r]的位置。

問他走完後獲得的最大權值,i >=n就算走完。

樣例

輸入樣例#1:

5 2 3

0 12 3 11 7 -2

輸出樣例#1:

11
題解

設dp[i]為到達i位置獲得的最大權值。

i位置的值一定是dp[i]  = dp[k]+a[i] (i-r<=k<=i-l),那麼取k中最大值就可以。

用單調佇列來求最大dp[k]。

**

#include using namespace std;

#define rep(i,a,b) for(int i = a; i <= b; i++)

const int maxn = 400005;

int a[maxn];

int n, l, r;

struct node

node(int xx,int pp)

}q[maxn];

int dp[maxn]; //dp[i]表示當前i位置最大值

int main()

q[1] = node(a[0], 0); //第乙個存進佇列中的是dp[l] = a[i];

int head = 1, tail = 1;

int ans = -1;

rep(i, l+1, n+l)

printf("%d\n", ans);

} return 0;

}

洛谷P1725琪露諾 單調佇列 dp

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

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

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

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

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