luogu

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 }

 

おすすめ

転載: www.cnblogs.com/iat14/p/11482904.html