2019年11月30日
午前10時05分54秒
#include <ビット/ STDC ++ H.> の#include <STDLIB.H> する#include <stdio.hの> 使用して 名前空間STDと、 の#define MAXN 10005 の#define M 105 INT C [M] [MAXN]; INT W [M] V [M]; int型 X [M]は; // X [M]はカートのi番目の項目を追加するかどうかを表す 整数のmain(){ intは、Jは、N-、Wは、I、 COUTが << 」一品を入力してください番号:" ; cinを >> N-; coutの << " ショッピングカートの容量を入力してください:" ; cinを >> W; coutの<< " 空白で区切られた重みwの値及びv各項目を入力してください" ; のための(INT I = 1 ; I <= N ++ {I) CIN >> W [I] >> V [I ]; } ため(私は= 0 ; I <= N ++ {I) C [I] [ 0 ] = 0 ; } ため(J = 0 ; J <= Wであり; ++ J){ C [ 0 ] [J] = 0 ; } ため(私は= 1。 ; I <= N; ++ I){ ため(INT J = 1。 ; Jは<= Wであり; ++J){ IF(J <W [I]){ // 記事はないに、カートの重量容量よりも大きい C [I] [J] = C [I- 1 ] [J]; } そうでなければ{ C [ I] [J] = MAX(C [I- 1 ] [J]、C [I- 1 ] [JW [I] + ; V [I]) } } } COUT << 「カートの最大荷重値:" << C [N-] << [Wである] ; ENDL // 構成される逆最適 J = Wである; のための(I = N-; I> 0 ; - I){ IF(C [I] [ J]> C [I- 1 ] [J]){ X [i]は = 1 ; J - = W [i]は、 } 他{ X [i]は = 0 ; } } COUT << " 装入购物车的物品为:" << ENDL。 以下のために(INT iが= 1 ; I <= N; ++ I){ 場合(X [I] == 1 ){ COUT << I << " " 。 } } システム(" 一時停止" )。 リターン 0 ; }