zoukankan      html  css  js  c++  java
  • bzoj3156

    斜率优化dp,比较裸

    注意int64的运算

     1 var f,a,q:array[0..2000010] of int64;
     2     i,n,h,t:longint;
     3     x,y,z:int64;
     4 
     5 function g(j,k:int64):double;
     6   var p,q:double;
     7   begin
     8     p:=2*(f[k]-f[j])+sqr(k)-sqr(j)-k+j;
     9     q:=2*(k-j);
    10     exit(p/q);
    11   end;
    12 
    13 begin
    14   readln(n);
    15   for i:=1 to n do
    16     read(a[i]);
    17   h:=0;
    18   t:=0;
    19   q[0]:=n;
    20   f[n]:=a[n];
    21   for i:=n-1 downto 0 do
    22   begin
    23     while (h<t) and (g(q[h],q[h+1])>i) do inc(h);
    24     x:=q[h];
    25     y:=i;
    26     z:=(x-y)*(x-y-1);
    27     f[i]:=(2*f[q[h]]+z) div 2+a[i];
    28     if i<>0 then
    29     begin
    30       while (h<t) and (g(q[t],i)>g(q[t-1],q[t])) do dec(t);
    31       inc(t);
    32       q[t]:=i;
    33     end;
    34   end;
    35   writeln(f[0]);
    36 end.
    View Code
  • 相关阅读:
    js中使用EL表达式
    洛谷——RMQ
    模板——RMQ
    洛谷——图论
    洛谷——基础搜索
    洛谷——搜索
    搭桥
    简单dp
    Codevs 3194 基因变异
    cin、scanf、gets、getchar 用法介绍
  • 原文地址:https://www.cnblogs.com/phile/p/4473234.html
Copyright © 2011-2022 走看看