ソリューション:シンプルな01バックパック、物理的な時間を過ごすために求めていることはVであるときを想像し、変更について少し考え方を入れて、ほとんどのロックバンドのボリュームはどのくらいです。
DPは[VMAX]東海、無溶液、残りの体積に達していない場合はそうでなければ、ループは最小限の物理的消費を検索します。
1の#include <cstdioを> 2の#include <iostreamの> 3の#include <CStringの> 4の#include <アルゴリズム> 5 の#define MAXN 10005 6 7 使って 名前空間STD。 8 9 int型DP [MAXN]、[MAXN] W [MAXN] C。 10 int型VSEA、VMAX、N。 11 12 のint main()の 13 { 14 のscanf(" %D%D%D "、&VSEA、&N、&VMAX)。 15 のために(int型 I = 1を iが++; iが<= N ) 16 scanf関数(" %D%dの"、&C [i]は、&W [I])。 17 のためには、(int型 i = 1 ; iは<; I ++ N = ) 18 のための(INT V = Vmaxに; V> v-- = [I] W ) 19 、DP [V] = MAX(DP [V]、DP [ VW [I] + C [I])。 20 であれば(DP [VMAX] < VSEA) 21 { 22 のprintf(" 不可" )。 23 リターン 0 ; 24 } 25 のために(INT I = 1; I <= VMAX; iは++ ) 26 であれば(DP [I]> = VSEA) 27 { 28 のprintf(" %dの"、vmax- I)。 29 リターン 0 ; 30 } 31 リターン 0 。 32 }