各項目には、2つの属性があります。シンプルなアイデアは、これら二つの特性は状態になっている設計することであるが、宇宙の爆発。また、この2つのプロパティは、(最小差の絶対値)、あなたがしたいことの相互関係の制約があるため、状態にデザインに答えるには、F $提供[I] [J] $ $ I $個人差が両者のJの$の$から選択され、 。このようなDP。従って暴力に$ O(NM ^ 3)$バックパック、転送レコード、すなわち$ gを[I] [J] [K] $ この人に$ $ I $ J $は、ヒトから選択される現在の時刻を表現するために、ありますどのように転送、$ jの-1 $の移転場合、$私は人が選出されたことを$。
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4の#include <cmath> 5の#include <アルゴリズム> 6の#include <キュー> 7 の#define DBG(X)CERR <<#1 X << "= "<< X << ENDL 8 の#define _dbg(X、Y)CERR <<#X <<"= "<< X <<" "<<#1 Y <<"=" << Y << ENDL 9 使用して 名前空間はstdを、 10 typedefの長い 長いLL。 11テンプレート<型名T>インラインチャー MIN(T&A、テンプレート<型名T>インラインチャー MAX(T&A、TB){ 戻り <B A = B、?1:0 ;} 13テンプレート<型名T>インラインT _min(TA、TB)は{ 返す <Bを?:B;} 14テンプレート<型名T>インラインT _max(TA、TB){ 戻り A> B?:B;} 15テンプレート<型名T>インラインT(T&読み取りX)を、{ 16 、X = 0。int型の F = 0 ; char型の C; しばらく(isdigit(C = getchar関数())!)の場合(C == ' - ')は、f = 1 ; 17 一方(isdigit(c)参照)、X = X * 10 +(C&15)、C = GETCHAR()。返す fはX = - ?X:X; 18 } 19 のconst int型 N = 200 + 5、M = 800 + 7、INF = 0x3f3f3f3f 。 20 INT [F 22 ] [M]、G [N] [ 22 ] [M]、[N]、B [N]、SEN [M]。 21 int型N、M、ANS、THX、ORZ、T。 22 23 INTメイン(){ // freopenは( "test.in"、 "R"、STDIN)。// freopenは( "test.outに"、 "W"、STDOUT)。 24 一方、(READ(n)は、()Mを読み取り、N || M){ 25 THX = ORZ = ANS = 0 。 26 のために(登録をint = I 0、I <= M; ++ I)のために(登録INT J = 0 ; J <= 800 ; ++ j)の[I] [J] = F - INF。 27 のmemset(G、0、はsizeofのG)。 28 のために(登録をint i = 1 ; iが<= N; ++ i)を読み取る([I])([I] B)を読み取ります。 29 F [ 0 ] [ 400 ] = 0 ; 30 ため(登録をint i = 1 ; iは= N <; ++ I) 31 のため(登録INT J = _min(I、M); J; - j)は 32 のために(登録int型 K = [I] -b [i]は、K <= 800 ; ++ k)が 33 であれば(MAX(F [J] [K]、F [J- 1 ] [K-([I] -b [I])] + [ I] + B [I]))G [I] [J] [K] = J- 1 。 34 他 G [I] [J] [K] = J。 35 のために(登録をint i = 0 ; iが<= 400 ; ++ i)の場合(F [M] [ 400 = + I]> 0|| F [M] [ 400 -i]> = 0 ){ 36の [M] [FのANS = 400 [M] F + I]> [ 400 -i]?400 + I:400 -i。破ります; 37 } 38 のint i = N、J = M。 39 一方、(I){ 40 であれば(G [I] [J] [ANS] == J- 1)銭[J] = I、THX + = [I]、ORZ + = B [i]は、ANS - =( [I] -b [i])と、 - I、 - J。 41 他の - 私は、 42 } 43 のprintf(" ジュリー#%d個の\ n "、++ T)。 44 printf(" ベスト陪審は、防衛のための訴追と値%dの値%dを有する:\ nを" 、THX、ORZ)。 45 のために(登録をint = I 1、I <= M; ++ I)のprintf(" %dの" 、SEN [I])。 46の プット("" )。 47 } 48 リターン 0 。 49 }