Topic links
bzoj1911: [Apio2010] Special Operations team
Exercises
First, the state transition equation
\ (f_i = max (F_j+a (S_i-s_j) ^2+b (s_i-s_j) +c) \)
Here are two ways to summarize the optimization of push slope.
Direct Push:
Set \ (j<k\) and \ (j\) ratio \ (k\) excellent.
\[f_j+a (S_i-s_j) ^2+b (S_i-s_j) +c>f_k+a (s_i-s_k) ^2+b (s_i-s_k) +c\]
\[f_j-f_k+a (2s_i-s_j-s_k) * (S_k-s_j) +b (S_k-s_j) >0\]
\[f_j+s_j^2-2as_is_j-bs_j >f_k+s_k^2-2as_is_k-bs_k\]
Set \ (g_j=f_j+as_j^2-bs_j\),\ (h_j=-2as_j\)
Get
\ (\frac{g_j-g_k}{h_j-h_k}<-s_i\)
Find Straight line analytic type
Code
#include <cstdio>#include <cstring>#include <algorithm>#define LL Long Longinlinell read () {ll x =0, F =1;Charc = GetChar (); while(C <' 0 '|| C >' 9 '){if(c = ='-') F =-1; c = GetChar ();} while(c <=' 9 '&& C >=' 0 ') x = x *Ten+ C-' 0 ', C = GetChar ();returnx * F; }Const intMAXN =1000007; LL N,a,b,c; LL SUM[MAXN]; LL DP[MAXN]; LL Y (inti) {returnDp[i] + A * sum[i] * Sum[i]-b * sum[i]; } LL X (inti) {returnSum[i]; }DoubleSlopintIintj) {return 1.0* (Y (i)-y (j))/(X (i)-X (j)); }intQ[MAXN];intMain () {n = read (), a = Read (), B = Read (), C = Read (); for(inti =1; I <= n;++ i) sum[i] = read () + Sum[i-1]; for(intL =0, r =0, i =1; I <= n;++ i) { while(L < R && Slop (Q[l],q[l +1]) >2* A * sum[i]) L + +;//dp[i] = Dp[q[l]] + A * (Sum[i]-sum[q[l]) * (Sum[i]-sum[q[l]) + b * (Sum[i]-sum[q[l]] + c);Dp[i] =-(2* A * sum[i] * X (q[l])-Y (Q[l])-A * sum[i] * Sum[i]-b * sum[i]-c); while(L < R && Slop (Q[r-1],Q[R]) <= slop (q[r],i)) R--; q[++ r] = i; } printf ("%lld\n", Dp[n]);return 0; }
bzoj1911: [Apio2010] Special Operations team