羅区P2577 [ZJOI2005]昼食の説明

デイリー質問day56パンチ

分析

アルゴリズム:貪欲+ DP

考えることは貪欲簡単:人ので、最初の降順夕食の時間によって、時間節約Dafanに遅く食べます。

まず、我々は、Fと考えるべきである[I] [J] [K]:私は、個々の前に、ウインドウで第1 Dafan総時間j、2号全体の時間窓Dafan K次いでDPであります

もちろん、このスペースは、バーストなので、一次元を削除することを期待します。

F [i] [j]は、フロントI個体、ランク1 Dafan総時間ウィンドウJ、初めて食事を示し

私たちは、それが便利J + K = I Dafan個々の合計で、k = SUM(I)-jことがわかります。プレフィックスとを維持することが可能です。

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <CStringの>
 4の#include <アルゴリズム>
 5  の#define MAXN 200 + 10
 6  の#define INF 2147483647
 7  の#define担当者のための(I、S、E)(レジスタINT iは秒=; <; ++ I)= E I
 8  の#define = E I;(INT I = Sを登録するためのDWN(I、S、E)>; - i)が
 9  使用して 名前空間STDを、
10インラインintはREAD()
 11  {
 12      INT X = 0、F = 1 13      チャー C = GETCHAR()。
14      一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')、F = - 1C = GETCHAR();}
 15      ながら(C> = ' 0 ' && C <= ' 9 '){X = X * 10 + C- ' 0 'C = GETCHAR();}
 16      リターン F * X。
17  }
 18インラインボイドライト(int型X)
 19  {
 20     もし(x < 0){のputchar(' - ')。X = - X;}
 21      場合(X> 9)書き込み(X / 10 )。
22      のputchar(Xの%10 + ' 0 ' )。
23  }
 24  INT N。
25  INT 和[MAXN]。
26  INT DP [MAXN] [MAXN * MAXN]。
27  構造体ノード
 28  {
 29      int型A、B。
30  }ランチ[MAXN]。
31  ブールCMP(ノードX、ノードY)
 32 {
 33      リターン XB> YB。
34  }
 35  のint main()の
 36  {
 37      N = (読み取り)
38      担当者(I、1、N){ランチ[I] .A = read()は、ランチ[i]を.B = 読み取る();}
 39      ソート(昼食+ 1、昼食+ N + 1 、CMP)。
40      担当者(I、1、n)の和[I] =和[I- 1 ] + 昼食[I] .A。
41      のmemset(DP、127はsizeof (DP))。
42      DP [ 0 ] [ 0 ] = 0;
43      担当者(I、1 、N)
 44          担当者(j、0 、和[I])
 45          {
 46              であれば(j> =ランチ[I] .A)DP [I] [J] =分(DP [I] [J]、MAX(DP [I- 1 ] [J-ランチ[I] .A、J + 昼食[I] .B))。
47              であれば(和[I] -J> =ランチ[I] .A)DP [I] [J] =分(DP [I]、[J]、MAX(DP [I- 1 ] [j]は、合計[ i]は-j + 昼食[i]の.B));
48          }
 49      INT ANS = INF。
50      担当者(I、0、合計[N])ANS = 分(ANS、DP [n]は[I])。
51      ライト(ANS)。
52      リターン 0 53 }

してくださいギャングの論文(とにかく、私はその手段が論文のか分かりません)

おすすめ

転載: www.cnblogs.com/handsome-zyc/p/12023999.html