luogu_P4677山建て小学校

ポータル:https://www.luogu.org/problem/P4677

私はわずか2分Aにこの質問LYHを聞いて、ttql

これは、中央値を見つけることです唯一の学校は、複数の学校が行うことがわかりましたか?

私はどこの小学校を建設するかわからない、ああ、MMP、カットオフ点のDP列挙主な範囲。(私はそう理解しました

Fだから、[I] [J] I〜jは中央、右を見つけるために、学校を構築するための最小コストを表します。

次にDP [i] [j]は[最小コスト、転写式DP [I] [J] =分{DP [K] [J-1] + F [K + 1]の正面I村内蔵J学校を表しI]}。

#include <cstdioを>
 の#define R登録
する#include <CStringの> 
する#include <アルゴリズム>
 使用して 名前空間STDを、
INTの N、M、S [ 510 ]。
INT [F 510 ] [ 510 ]。
INT DP [ 510 ] [ 510 ]。
INT メイン(){ 
    scanf関数(" %d個の%のD "、&​​N、&M)。
    以下のための(R用のint i = 2 ; iが<= N; iは++ ){ 
        scanf関数(" %のD "、& S [I])。
        S [I]+ = sの[I- 1 ]。
    } 
    ための(RのINT i = 1 ; iが<= N; iは++ ){
         ための(Rのint型 J = I; J <= nであり、j ++ ){
             int型ミッド=(iは+ J)>> 1 ための(Rのint型 K = Iであり; J = <kであり、k ++)[I] [J] + = ABS(S [中間] - F S [K])。
        } 
    } 
    のmemset(DP、0x3fをはsizeof (DP))。
    DP [ 0 ] [ 0 ] = 0 ための(Rは、int型、I = 1 ; iが<= N; I ++){
         ための(RのINTの J = 1 ; J <= Mであり、j ++ ){
             場合(J> = I){ 
                DP [I] [J] = 0 ;
                続け; 
            } 
            のための(Rのint型 K = J- 1、K <= iは、++ k個){ 
                DP [I] [J] =分(DP [I]、[J]、DP [K] [J- 1 ] + F [K + 1 ] [I])。
            } 
        } 
    } 
    のprintf(" %d個の\ n " 、DP [n]は[M])。
    リターン 0  ;
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/coclhy/p/11714568.html