フェイス質問
https://www.luogu.org/problem/P2577
問題の解決策
#include <cstdioを> する#include <iostreamの> する#include <アルゴリズム> の#include <CStringの> 使用して 名前空間STD。 構造体ノード{ int型、B。 ブール 演算子 <(constのノード&RHS)のconst { リターン B> rhs.b。 } } T [ 250 ]。 const int型 INF = 98765 ; int型 N、ANS = INF。 int型の F [ 205 ] [ 40250 ]、合計[ 205 ]。 int型DP(int型のx、int型Y){ 場合(X> = 0 && Y> = 0 && Y <=和[X])戻り [X] [Y] F。それ以外 の戻りINF。 } int型のmain(){ int型I、J。 scanf関数(" %のD "、&N) 和[ 0 ] = 0 。 用(i = 1 ; iが<= N; iは++ ){ scanf関数(" %d個の%のD "、&T [i]は.A、&T [i]は.B)。 } ソート(T + 1、T + N + 1); 用(i = 1 ; iが<= N; I ++)は和[I] =和[I- 1 ] + T [i]は.A。 memsetの(F、0x3fを、はsizeof (F))。 F [ 0 ] [ 0 ] = 0 。 用(i = 1 ; iが<= N; iは++ ){ ため(J = 0 ; J <=和[I]; J ++)F [i]は[J] =分(MAX(DP(I- 1、JT [ I] .A)、J + T [i]は.B)、MAX(DP(I- 1、j)は、和[I] -j + T [i]は.B))。 } ANS = INF。 用(i = 0 ; iが<=和[N]; iは++)ANS = 分(ANS、F [n]は[I])。 COUT<< ANS << てendl; }