1つの#include <ビット/ STDC ++ H> 2 の#defineため_for(iは、B)(INT I =(A); iはB <; iは++) 3 の#define _rep(I、B)のための- (I; I> B iは=(A)INT) 4 の#define INF 0x3f3f3f3f 5 の#define MOD十億七 6のtypedef 長い 長LL。 7 使用して 名前空間はstdを、 8 インライン()読み取りllの 9 { 10 LL ANS = 0 。 11 CHAR CH = GETCHAR()、=最後' ' 。 12 しばらく(!isdigit(CH))最後の= CH、CH =getchar関数(); 13 一方(isdigit(CH))ANS =(ANS << 1)+(ANS << 3)+ CH - ' 0 '、CH = GETCHAR()。 14 であれば(最後== ' - ')ANS = - ANS。 15の リターンANS; 16 } 17インラインボイドライト(LLのX) 18 { 19の 場合(X < 0)は、x = -x、のputchar(' - ' )。 20 であれば(X> = 10)のライト(X / 10 )。 21 のputchar(Xの%10 + ' 0 ' )。 22 } 23 構造体ランプ 24 { 25 のint POS。 26 int型のパワー; 27 }。 28 int型N、C。 29ランプ[ 53 ]。 30 int型 DP [ 53 ] [ 53 ] [ 2 ]。 31 INTの和[ 53 ] [ 53 ]。 32 のint main()の 33 { 34 N = read()は、C = )(読み取ります。 35 _for(I、1、N + 1 ) 36 [I] .POSの=(読み取り)、[I] .power = 読み取ります(); 37 38 _for(I、1、N + 1 ) 39 { 40 和[i]は[I] = [I] .powerと、 41 _for(J、I + 1、N + 1 ) 42 和[I] [J] =和[I]、[J- 1 ] + [J] .power。 43 } 44 45 のmemset(DP、0x3fを、はsizeof (DP))。 46 場合(C> = 2 ) 47 DP [C- 1 ] [C] [ 0 ] =([C] .POS - [C- 1 ] .POS)*(和[ 1 ] [C- 1 ] +和[C + 1 ] [N])。 48 であれば(C <= N- 1 ) 49 DP [C] [C + 1 ] [ 1 ] =([C + 1 ] .POS - [C] .POS)*(和[ 1 ] [C- 1 ] +和[C + 1 ] [N])。 50 51 _for(LEN、3、N + 1 ) 52 _for(L、1、N-LEN + 2 ) 53 { 54 のint R = L + len- 1 。 55 DP [L] [R] [ 0 ] =分(DP [L + 1 ] [R] [ 0 ] +([L + 1 ] .POS - [L] .POS)*(和[ 1 ] [L ] +和[R + 1 ] [n]は) 56 、DP [L + 1 ] [R] [ 1 ] +([R] .POS - [L] .POS)*(和[ 1 ] [L] +和[R + 1 ] [N]))。 57 DP [L] [R] [ 1 ] =分(DP [L] [R- 1 ] [ 0 ] +([R] .POS - [L] .POS)*(和[ 1 ] [L -1 ] + 和[R] [N]) 58 、DP [L] [R- 1 ] [ 1 ] +([R] .POS - [R- 1 ] .POS)*(和[ 1 ] [ 1- 1 ] + 和[R] [N])); 59 } 60 ライト(MIN(DP [ 1 ] [N] [ 0 ]、DP [ 1 ] [n]を[ 1 ]))。 61 リターン 0 。 62 }