線形モデル+ DP - cf1201D

 このようなトピックが構築する最初のモデルとなり、DP単純化された方程式をたくさん作るために良好な状態を選びます

/ * 
DP [I] [0]は右から左に示し、最後に左端で停止
DP [I] [1]右に左を表し、右の最後のストップ
DP [I + 1] [0 ] =分(DIS( + +中のLi +のRI +のLpre-> Riを1)+ DP [事前] + [0]、DIS(Rpre-​​> Riを1)+ DP [事前] [1])。1. 1- 
DP [Iは、+ 1] [1 =分(DIS(Lpre->のLi + 1)+ DP [事前]の[0]、DIS(Rpre-​​>のLi + 1)+ DP [事前] [1]。。。)+ +のリチウム里+ 1 1、。
 * / 
の#include <ビット/ STDC ++ H.>
 使用して 名前空間STD;
 の#defineが長いロングLL 
 の#define N 200005
 の#define INF 0x3f3f3f3f3f3f3f3f 

LL N-、M、K、Q、B [N]、L [N]は、R [N] 、DP [N] [ 2 ]; 

ロング ロング DIS(LL POS1、POS2 LL){ // pos1-> POS2コスト
    IF(POS1> POS2)スワップ(POS1、POS2);
     INT T = LOWER_BOUND(B +。1、Bの+ 1。 + Q、POS1) - B;
     IF!(T = Q + 1 && B [T] <= POS2)を返す POS2-POS1; // あり挟む
    
    LL RES = ; INF
     // 見つける左POS1を
    IF(T =!1。){ 
        T - ; 
        RES =分(RES、2 *(POS1-B [T])+ pos2- POS1); 
    } 
    T = LOWER_BOUND(Bの+ 。1、Bの+ 1 + Q、POS2) - B;
     IF(= T + Q!1。 
        RES =分(RES、2*(B [T] -pos2)+ pos2- POS1)。
    リターンのres; 
} 

int型のmain(){ 
    memsetの(L、0x3fをはsizeofのL)。
    memsetの(R、0はsizeof R)。
    L [ 1 ] R [= 1 ] = 1 
    CIN >> N >> M >> K >> Q。
    以下のためにint型私= 1 ; iが= Kを<; Iは++ ){ 
        R LL、C; CIN >> R >> C。
        L [R] = 分(L [R]、c)前記 
        R [R] = MAX(R [R]、c)前記 
    } 
    のためにINT I = 1 ; I <= Q; Iは++)CIN >> B [I]は、
    ソート(Bの + 。1、Bの+ 1 + Q)
    
    のmemset(DP、は0x3Fはsizeof DP);
     //は、前処理の最初の行
    であれば(R&LTの[ 1。 =!] 1。 DP)[ 1 ] [ 1。 R&LT =] [ 1 - ] 1。 ; // 最初の行は点を超えて、それがの右端で停止しなければならない(1,1)を有する場合、
    他の DP [ 1 ] [ 1。 ] DP = [ 1 ] [ 0 ] = 0 ; // 点(1,1)またはノーポイント、両方の左を犠牲にして停止し、右0端
    
    INTを予備= 1 以下のためにint型、I = 2 ; iが<= N; iが++)場合(R [i]が){ 
        DP [I] [ 0 ] =分(DIS(L [事前]、R [I])+ DP [事前] [ 0 ]、DIS(R [事前]、R [I])+ DP [事前] [ 1 ])+ R [I] -L [i]は、// 右到左 
        DP [I] [ 1 ] =分(DIS(L [事前]、L [I])+ DP [事前] [ 0 ]、DIS(R [事前]、L [I])+ DP [事前] [ 1 ])+ R [I] -L [i]は、// 左到右 
        前= I; 
    } 
    
    COUT <<分(DP [事前] [ 0 ]、DP [事前] [ 1 ])+プレ1 << ' \ nは" ; 
}

 

おすすめ

転載: www.cnblogs.com/zsben991126/p/11516850.html