Title Link: http://www.lydsy.com/JudgeOnline/problem.php?id=1911
Descriptioninputoutput
Slope optimization DP
The Master's puzzle: http://www.cnblogs.com/JSZX11556/p/4811459.html
I'm too lazy to write it down ...
1#include <iostream>2#include <cstdio>3#include <algorithm>4#include <cstring>5 #defineRep (i,l,r) for (int i=l; i<=r; i++)6 #defineCLR (x, y) memset (x,y,sizeof (×))7 using namespacestd;8typedefLong Longll;9 Const intMAXN =1000010;Ten ll N,A,B,C,HEAD,TAIL,F[MAXN],Q[MAXN],S[MAXN]; One inline ll read () { All ans =0, F =1; - Charc =GetChar (); - for(;!isdigit (c); C =GetChar ()) the if(c = ='-') F =-1; - for(; IsDigit (c); C =GetChar ()) -Ans = ans *Ten+ C-'0'; - returnAns *F; + } -Inline LL Calc (intx) { + returnF[X] + A * s[x] *S[x]; A } atinline LLGet(intIintj) { - returnF[J] + A * (S[i]-s[j]) * (S[i]-s[j]) + B * (S[i]-s[j]) +C; - } - intMain () { -n = read (); A = Read (); B = Read (); C =read (); -Rep (I,1, n) s[i] = s[i-1] +read (); inHead = Tail = f[0] = q[0] =0; -Rep (I,1, N) { to while(Head < tail && Calc (q[head+1])-Calc (Q[head]) >= (2* A * S[i] + B) * (s[q[head+1]]-s[q[head]) head++; +F[i] =Get(I,q[head]); - while(Head < Tail && (Calc (q[tail))-Calc (q[tail-1]) * (S[i]-s[q[tail]) <= (Calc (i)-calc (Q[tail])) * (S[q[tail]]-s[q[tail-1]]) tail--; theQ[++tail] =i; * } $printf"%lld\n", F[n]);Panax Notoginseng return 0; -}
View Code
BZOJ1911 [APIO2010] Special Operations team