暴力貪欲+前処理オートマトン--cf990E

各ランプの列挙し、そのランプの最低価格を見つけます

貪欲戦略:チューブの端部は、ランプを配置することができる最も近いノードを見つけるために、再度、ノードに配置されていない場合、ランプは、ランプがどこに配置される、ゼロから右に配置されています

したがって、各ランプを前処理する最初のノードのランプに対応するノードを配置することができる最も近くに配置することができない、即ち、添字自動的に転送を見つけることができるようにします

使用して 名前空間はstdを、
 
INT [MAXN]。
INT [MAXN] B。
INTのN、M、K。
 
 
LL作業(INT INS)
{ 
    LL ANS = 0 INTの ID = 0 一方、(ID <= N)
    { 
        場合(ID +イン> = N)
        { 
            ANS ++ 破ります; 
        } 
        ID = [ID + イン]。
        ANS ++ ; 
 
    } 
    戻り ANS * B [イン]を、
}
 
INT メイン()
{ 
    ながら(〜のscanf(" %D%D%D "、&​​N、&M&K))
    { 
        LAN(0 )。
        LAN(B、0 ); 
        (Iについて1 、M)
        { 
            int型のTEM。
            scanf関数(" %のD "、およびTEM)。
            [TEM] = 1 
        } 
        (Iについて1 、K)
        { 
            int型のTEM。
            scanf関数(" %のD "、& B [I])。
        }
        もし([ 0 ] == 1 
        { 
            のprintf(" -1の\ n " );
            続け; 
        } 
        int型の ID = 0 int型 curLenで指定= 0 ;
        int型 MAXLEN = 0 ; 
        (Iについて1 、N)
        { 
            場合([I] == 0 
            { 
                [I] = I。
                ID = I; 
            } 
            
            { 
                 [I] = ID。
            } 
            MAXLEN = MAX(I-、maxlenを[I])。
        } 
        であれば(maxlenを> = K)
        { 
            のprintf(" -1の\ n " );
            続け; 
        } 
        LL ANS = 1LL << 60 
       (I、maxlenを用 + 1 、K)
       { 
           ANS = 分(ANS、ワーク(I))。
       } 
       のprintf(" %LLDする\ n " 、ANS)。
    } 
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/zsben991126/p/11110918.html