題意
有0~n這樣的n+1個位置,每個位置都有乙個權值,乙個人在這個位置就會獲得這個位置的權值a[i]。樣例乙個人最開始在0位置權值為0,假設他現在在i,他下一步只能走到[i+l, i+r]的位置。
問他走完後獲得的最大權值,i >=n就算走完。
輸入樣例#1:題解輸出樣例#1:5 2 3
0 12 3 11 7 -2
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,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照一種特殊的...