poj1015ジュリー妥協[バックパック]

各項目には、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、?10 ;}
 13テンプレート<型名T>インラインT _min(TA、TB)は{ 返す <Bを?:B;}
 14テンプレート<型名T>インラインT _max(TA、TB){ 戻り A> B?:B;}
 15テンプレート<型名T>インラインT(T&読み取りX)を、{
 16      、X = 0int型の 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 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/saigyouji-yuyuko/p/11525388.html