DP四辺形の最適化

且满足DP [A]、[C] + DP [; DP [I] [J] =分(DP [I] [K] + DP [K + 1] [j]はW + [I] [J])如果B] [D] <= DP [A]、[D] + DP [C] [D](<B <= C <D)。

これは、四角形の不等式の性質DPを持っています

[I] [J]不等式単調四辺形の特性を満足Wさらなる証拠が、それはまた、四角形不等式特性DPを有する場合

单调性:W [i]は[J] <= W [i]は[J + 1] <= W [I + 1] [J + 1]

 

http://www.51nod.com/Challenge/Problem.html#problemId=1022

 

#include <ビット/ STDC ++ H>
 の#define第Fiの
 に#define SE第二
 の#define INF 0x3f3f3f3f
 の#define LNF 0x3f3f3f3f3f3f3f3f
 の#define cin.tie(0); cout.tie(0)FIO IOS :: sync_with_stdio(偽)
 #定義 pqueue PRIORITY_QUEUE
 の#define NEW(B)のmemset(A、B、はsizeof(A))
 CONST  ダブル PI = 4.0 * ATAN(1.0 )。
constの ダブル E = EXP(1.0 );
const  int型 MAXN = 1E6 + 8 
typedefの長い 長いLL。
typedefの符号なしの長いです 長いULL;
// のtypedef対<LL、LL> P。
CONST LLのMOD = 1E9 + 7 CONST ULLの基地 = 1E7 + 7 使用して 名前空間はstdを、
LL DP [ 2008 ] [ 2008 ]; 
LL S [ 2008 ] [ 2008 ]; 
LL [ 2008 ];
INT のmain(){
     int型のn;
    int型のx; 
    scanf関数(" %のD "、&N)
    int型 iは= 1、I ++; iが<= N。){ 
        scanf関数(" %のLLD "、および[I])。
        A [iが N +] = [I]。
    } 
    N * = 2 ;
    以下のためにint型 i = 1 ; iが<= N; iは++ ){ 
        [I] + = [I- 1 ]。
    } 
    のmemset(DP、LNF、はsizeof (DP))。
    int型 i = 1 ; iが<= N iが++ ){ 
        S [i]は[I] = I。
        DP [i]は[I] = 0 ; 
    } 
    のためのINTI = N; I> = 1 ; i-- ){
         ためのint型 J = I + 1、J <= nであり、j ++ ){
             ためのint型のk = sの[I]、[J- 1 ]; <= SをK [ I + 1 ] [j]は、k個++ ){
                 場合(DP [I] [J]> DP [I] [K] + DP [K + 1 ] [J] + [J] -a [I- 1 ]){ 
                    DPは、[I] [j]は DPを= [I] [K] + DP [K + 1 ] [J] + [J] -a [I- 1 ]。
                    S [i]は[J] = K。
                } 
            } 
        } 
    } 
    N / = 2; 
    LL ANS = LNF。
    以下のためにint型 i = 1 ; iが++; iが<= N {)
        ANS(ANS、DP [i]は[I + N- =分1 ])。
    } 
    のprintf(" %LLDする\ n " 、ANS)。
}

 

おすすめ

転載: www.cnblogs.com/Profish/p/11200467.html