問題やテストを解決し、それを書き、最初の鳩
#include <cstdioを> する#include <cstdlib> の#include <アルゴリズム> 使用して 名前空間STD; int型N-、M、K、 CONST INT N = 100003 ; INT DIS [N]、OUT [N]、PEO [N]、バス[ N]; // DIS [I]は、次のステーションに中間修正を時間を表し、PEOは、各ステーションに人の最後の時間を表す変更されない、車両バスは時間を表し、影響はDISである INT ANS。 int型のmain() { scanf関数(" %D%D%D "、&N、&M、およびK); 以下のために(INT iが= 1 ; I <N; I ++)のscanf(" %dの"、&DIS [I])。 以下のために(INT iが= 1 ; I <= M; I ++ ) { int型のTM、ST、エド。 scanf関数(" %D%D%D "、&TM&ST、&ED)。 ANS - = TM、PEO [ST] = MAX(TM、PEO [ST])、アウト [編] ++ ; } // ワーク INT INF [N]; // 中間ステーションI-I + 1の場合、装置を使用して、後ろの人の影響であろう 一方(K--を) { 以下のために(INT iが= 2 ; I <= N; I ++ ) バス[I] = MAX(PEO [I- 1 ]、バス[I- 1 ])+ DIS [I- 1 ]。 用(INT I = N- 1、I> 0 ; i-- ) 場合(DIS [i])と { INF [I] = OUT [I + 1。 ]; // 。I +ストップ人間1 IF(バス[I + 1 ]> PEO [I + 1 ])// 。人の背後にあるI + 1。あなたは、私は後ろの人に貢献できるよう、減速する車に従った場合 INF [I] + = INF [I + 1 ]; } 他の INF [I] = 0 ; int型 mx_inf = 0、POS = 0 ; 以下のために(INT iが= 1 ; I <N; iが++ ) 場合(INF [I]> mx_inf) mx_inf = INF [i]は、POS = I。 もし(!POS)ブレーク。 12月[メール] - 。 } // 出力 用(INT iは= 2 ; <I = N; ++ I ) { バス[I] = MAX(PEO [I- 1 ]、バス[I- 1 ])+ DIS [I- 1 ]。 ANS + = アウト [I] * バス[i]は、 } printf(" %dの\ n " 、ANS)。 リターン 0 ; }