1の#include <iostreamの> 2の#include <アルゴリズム> 3 使用して 名前空間STDを、 4 5 int型の DP [ 101 ] [ 1001 ]。 6 7 構造体RUB 8 { 9 int型、T、G、H。 10 } C [ 101 ]。 11 12 ブールCMP(摩擦B、こする) 13 { 14 リターン <におけるBT。 15 } 16 17 のint main()の 18 { 19 INTD、G。 20 CIN >> D >> G。 21 のために(int型 I = 1 ; I <= G iが++ ) 22 { 23 CIN >> C [i]は.T >> C [i]は.G >> C [I]・H。 24 } 25 ソート(C + 1、C + G + 1 、CMP)。 26 DP [ 0 ] [ 0 ] = 10 。 27 のために(int型 I = 1を iが++; I <= G ) 28 { 29 のために(INT J =0 ; J <= D; J ++ ) 30 { 31 であれば(DP [I - 1 ] [J]> =のC [I] .T) 32 DP [I] [J] = MAX(DP [I]、[J]、DP [I- 1 ] [J] + C [I]・G) 33 であれば(j> = C [I]・H && DP [I - 1 ] [J - C [I]・H]> = C [i]は.T) 34 DP [I] [J] = MAX(DP [I]、[J]、DP [I - 1 ] [J - C [I]・H])。 35 } 36 } 37 INT MAXH = 0 。 38 INT MAXT = 0 。 39 INT私; 40 のために(i = 1 ; I <= G iは++ ) 41 { 42 のための(int型 J = 0 J ++; J <= D ) 43 { 44 であれば、C [i]が.T - (DP [I] [J] > = 0 ) 45 MAXH = MAX(MAXH、J)。 46 MAXT = MAX(MAXT、DP [I] [J])。 47 } 48 であれば(MAXH> = D) 49 ブレーク。 50 } 51 であれば(MAXH> = D) 52 COUT << C [i]は.T << ENDL。 53 他の 54 coutの<< MAXT << てendl; 55 }