このようなトピックが構築する最初のモデルとなり、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は" ; }