[タイトル] [貪欲]ブラシ観光バス

問題やテストを解決し、それを書き、最初の鳩

#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 ;
}

 

おすすめ

転載: www.cnblogs.com/xwww666666/p/11815060.html