デイリー質問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 = - 1。C = 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 }
してくださいギャングの論文(とにかく、私はその手段が論文のか分かりません)