ポータル: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 ; }