チキン忙しい休日本当にWWW、本を読んで、1日の野球をして、車がなくなっていると思った(もちろん、LOL&退廃チャット時間)。
Pや大学だけワットを学ぶことができ、右ACMなどの大ヒットでなければなりません(アレクサンダー)
だから、OIは、ストライキで本当に唯一興味を持っている、と時折混乱物事に時間を持って、回復に関する簡単な質問で始まっでも強度もワット非常に一品である持っていました
まあ、あまりゴシップは言います。
この質問は一見、あまりにもLRJのブルーブックを表示さだけで得る最高スコア(上側の手をスコア - FLAC)に相当している最大、そして両方の定数ので。
これは、DPのOを(N ^ 3)を実現し、我々は(特定のコードのコメントを参照してください)最適化で撮影され、それぞれ、フロントを取り、接頭辞や接尾辞から、それはOを行って(N ^ 2)することができます!
#include <ビット/ STDC ++ H> の#defineは長い長いllの 名前空間stdを使用します。 const int型N = 1005; INT DP、W、F [N] [N]、G [N] [N]、[N]、N、T。 / * DP [I] [j]が第一と第二との間MAXデルタを意味します。 F [I] [J] =分{W [i]は[J] + DP [I]、[J]、W [I + 1] [J] + DP [I + 1] [J]、...、 W [J] [J] + DP [J] [J]} G [i] [j]が類似している...(逆) とがW [i] [j]が[K](Kの和を意味しますIからJまで) まず、DP [i]が[I]、[I]を= F [i]は[I] = G [i]は[I] = 2 * [I]。 ([I + 1] [J]、G [I] [J-1]、0 F)分-初期、DPを除い[i] [j]はW [i]は[J] = 最後ANSである(DP [1] [N] [1]〜[n]はW +)/ 2。 * / {()解決インラインボイド (I = 1 int型、iは= N <; iは++)のために、F [i]は[I] = G [i]は[I] = 2 * [I]、[I] + = [I-1]; 用(int型、L = 1、L <N; L ++) (; J <= N; int型I = 1、J =私はLを+ J ++、iは++)のために{ W = [J] -a [I-1]; DP = W-分(0、分(F [I + 1] [J]、G [I] [J-1]))。 F [I] [J] =分(F [I + 1] [j]は、W + DP)。 G [I] [J] =分(G [I] [J-1]、W + DP)。 } のprintf( "%d個の\ n"、DP + [N] >> 1)。 } int型のmain(){ scanf関数( "%のD"、&T)。 一方、(T - ){ scanf関数( "%のD"、&N); 以下のために(+ I、 "%のD")のscanfを(INT i = 1; iは++; iが= N <)。 IF(N == 1)のprintf( "%d個の\ n"、[1])。他)(解きます。 } 0を返します。 }