1の#include <cstdioを> 2の#include <アルゴリズム> 3。 使用した 名前空間STD; 4のtypedef ロング ロングLL; 5 のconst int型 MAXN = 1050 ; 6 構造体ノード 7。 { 8。 int型ARR、ST、ED; 9 } ID [MAXN * 10 ]; 10 INT T [MAXN]; // 最新時間 11。 INTのTi [MAXN]; // 到着時刻 12である INT [MAXN] SUM; // 番号 13は、 INTDIS [MAXN]。 14 のint G [MAXN]。 15 int型N、M、K。 16 のint main()の 17 { 18 のscanf(" %D%D%D "、&N、&M、およびK); 19 のためには、(int型 i = 1 ; iが<= N - 1 ; I ++ ) 20 のscanf(" %dの"、&DIS [I])。 21 のために(int型 I = 1 ; I <= M; iが++ ) 22 { 23 のscanf("%D%D%D "、&ID [i]の.arr、&ID [i]は.ST、&ID [i]の.ED); 24 T [ID [i]は.ST] = MAX(T [ID [I] .ST]、ID [i]の.arr); // 到大某点的最晚时间 25 和[ID [i]は.ED] ++; // 到达某点的人数 26 } 27 のために(INT I = 2 ; iが<= N; iが++ ) 28 和[I] + =合計[I - 1 ]; 29 用の(int型 i = 1 ; iが<= N; iが++ ) 30 TI [I] = MAX(TI [iが- 1 ]、T [I - 1 ])+ DIS [I - 1 ]; 31 int型 ANS = 0 ; 32 のために(int型 I = 1 ; I <= M; iは++ ) 33 ANS + = TI [ID [i]は.ED] - ID [i]の.arr。 34 一方、(K) 35 { 36 G [N - 1 ] = N。 37 のために(int型 I = N - 2、I> 0 ; i-- ) 38 { 39 であれば(TI [I + 1 ]> T [I + 1 ]) 40 G [I] = G [I + 1 ]。 41 他の 42 G [I] = I + 1 。 43 } 44 int型の POS = 0、MA = 0 。 45 のために(int型 i = 1 ; iが<; N iが++ ) 46 { 47 であれば( - DIS [I] &&(和[G [I]和[I])> MA) 48 { 49 MA =和[G [ I]] - 合計[i]は、 50台の POS = I。 51 } 52 } 53 であれば(!マサチューセッツ州) 54 ブレーク。 55 k-- ; 56の DIS [POS] - 。 57の ANS - = MA。 58 のために(int型 i = 1 ; iが<= N; iが++ ) 59 TI [I] = MAX(TI - [I 1 - 、T [i]が1 + DIS])[I - 1 ]。 60 } 61 のprintf(" %Dを\ n " 、ANS)。 62 63 リターン 0 ; 64 }