特定の後に補足コンテンツ_(:з「∠)_最初のコードを貼り付け
1つの#include <iostreamの> 2の#include <fstreamの> 3の#include <CTIME> 4の#include <アルゴリズム> 5の#include <WINDOWS.H> 6。 使用した 名前空間STD; 7 の#define N 10000 。8 。9 // INT [W 5。 ] = {0、2、3、4、5}; // 品の体積2,3,4,5 10 // INT V [5] = {0、3、4、5 ,. 6}; // 製品値3,4,5,6 11。 // INT = bagV 8; // バックパックサイズ 12である INT DP [N] [N]。 // ダイナミックプログラミングのテーブル 13は、 // INT項目[5]; // 最適解 14 15 空隙 FindMax(INT K、INT N-、INT W []、int型 V []){ // 動的プログラミング 16 のために(INT I = 1 ; Iは= Kを<; Iは++ ){ 17。 ための(INT J = 1。 ; J <= N; J ++ ){ 18は、 IF(J < W [I]) 。19 DP [I] [J]がDPを= [Iは- 1 ] [J]。 20 他 21 DP [I] [J] = MAX(DP [I - 1 ] [j]は、DP [iが- 1 ] [J - W [I] + V [I])。 22 } 23 } 24 } 25 26 空隙 findWhat(int型 I、int型 J、INT [] W、int型 V []、int型の項目[]){ // 最优解情况 27 であれば(私は> 0 ){ 28 であれば( DP [I] [J] == DP [I - 1 ] [J]){ 29 項目[I] = 0; 30 findWhat(I - 1 、J、W、V、項目)。 31 } 32 そう であれば(J - W [i]が> = 0 && DP [I] [J] == DP [I - 1 ] [J - [I] W] + V [i])と{ 33 項目[I ] = 1 。 34 findWhat(I - 1、J - W [i]と、W、V、項目)。 35 } 36 } 37 } 38 39 ボイドプリント(int型 K、int型、N INTの項目[]){ 40 / *{//动态规划表输出ための式(I ++; iはK + 1 <I = 0 INT) 41 のための(INT J = 0であり、j <N + 1、J ++){ 42 COUT << DPを[I] [J] << '「; 43 } 44 COUT << ENDL。 45 } 46 COUT << ENDL。* / 47 はcout << 「バックパックの中に置かれるべき項目番号は次のとおりです。」; 48 のために(int型 I = 0、I <K + 1 ; iが++){ // 最优解输出 49 であれば(項目[I] == 1 ) 50 coutの<< I << ' ' ; 51 } 52 COUT << ENDL。 53 } 54 55 INTメイン(ボイド) 56 { 57 LARGE_INTEGER nFreq。 58 LARGE_INTEGER nBeginTime。 59 LARGE_INTEGER nEndTime。 60 ofstreamのをFOUT。 61 ダブルコスト。 62 int型I、J、M、N、K。 63 裁判所未満<< 「あなたがプログラムを実行する回数を入力してください:」; 64 >> CIN メートル; 65 // int型object_amount [M]; 66 // ダブルランタイム[M]; 67 fout.open(" backpack.txt " は、App :: iOSの); 68 IF(!FOUT){ 69 CERR、< < " 開くことができませんファイル'backpack.txt' " << てendl; 70 リターン - 1。; 71がある } 72 (ios_base :: fout.setf 固定 ios_base :: FloatField、); // 科学表記使用してデジタル出力を防ぐ 73 srand関数((符号なし整数)時間(NULL))。 74 のために(i = 0 ; iは<M; iは++ ){ 75 N =ランド()%10000 。 76 K =ランド()%10000 。 77 // object_amount [I] = K。 78 FOUT << K << " " 。 79 INTの項目[K]。 80 COUTは<< " " << I + 1 << " 番目のテストのバックパック格子数は、" << N << ENDL。 81の coutの<< " << I + 1 << " 番目のテストのオブジェクト量は:「 << K << ENDL; 82 INT W [k]は、 83 のint V [k]は、 84 のmemset(DP、0、はsizeof (DP)); 85 [W 0 ] = 0 ; 86 [V 0 ] = 0 ; 87 用(J = 1、J <K、J ++ ){ 88 W [J] =ランド()%100 ; 89 V [J] =ランド() %1000年; 90 } 91 QueryPerformanceFrequency(&nFreq)。 92 QueryPerformanceCounterの(&nBeginTime)。 93 findMax(K、N、V、W)。 94 findWhat(K、N、W、V、項目)。 95 プリント(K、N、項目)。 96 QueryPerformanceCounterの(&nEndTime)。 97 費用=(ダブル)(nEndTime.QuadPart - nBeginTime.QuadPart)/(ダブル)nFreq.QuadPart。 98 // ランタイム[I] =コスト; 99 FOUT <<コスト<< てendl; 100の coutの<< "110 } * / 111 fout.close()。 112 coutの<< " 成功!" << てendl; 113 リターン 0 ; 114 }