_(:から」∠)_
1の#include <cstdioを> 2の#include <iostreamの> 3の#include <ctimeの> 4の#include <WINDOWS.H> 5の#include <アルゴリズム> 6の#include <fstreamの> 7 使って 名前空間STDを、 8 構造体 オブジェクト 9 { 10 INT ありません。 11 ダブル重量; 12 ダブル値。 13 ダブル平均。 14 }。 15 ブール CMP(CONST オブジェクト・X、CONST オブジェクト&Y) 16 { 17。 リターン x.average> y.average; // 小から大へ、<、>排気下がり 18がある } 。19 空隙 greedySelector(INT M、INT Wは、でありint型、[]ソリューション構造体 オブジェクト オブジェクト[]){ 20は int型 I = 0、V = 0、J = 0 ; 21は 、一方(オブジェクト [I] .Weight < Wである) 22は 、{ 23は =液[I] 1。; 24 Wは= Wは、 -オブジェクト[i]の.weight。 25 V = V + オブジェクト[i]の.VALUE。 26 私は++します; 27 } 28 V = Vの+(W / オブジェクト [I] .weight)* オブジェクト[i]の.VALUE。 29 [I] =溶液1 。 30 COUT << 「最適なオプションの対応する値である:」 << V << ENDL。 31 / * (私は++; iがm <I = 0)のための 32 { 33 (溶液[I] == 1)であれば 34 { 35 COUT <<オブジェクト[i]の.NO << ENDL。 36 } 37 } * / 38 } 39 INTメイン(ボイド) 40 { 41 LARGE_INTEGER nFreq。 42 LARGE_INTEGER nBeginTime。 43 LARGE_INTEGER nEndTime。 44 ofstreamのFOUT1。 45 ofstreamのFOUT2。 46 にsrand((符号なし整数)時間(NULL))。 47 int型M、I、J、T。 48 ダブルW; 49 ダブルコスト。 50の coutの<< "あなたがプログラムを実行する回数を入力してください:" ; 51 cinを>> トン、 52 fout1.open(" バックパック-object.txt 」、イオス::アプリ); 53 場合(!FOUT1){ 54 CERR < < " ファイルを開くことができません'背負object.txt' " << ENDL; 55 リターン - 1 ; 56 } 57 fout1.setf(ios_base :: 固定、ios_base :: floatfield); // 防止输出的数字使用科学计数法 58 fout2.open("weight.txt-バックパック" ;、アプリケーション:: iOSの) 59 IF!(FOUT2){ 60 CERR、<< " 開くことができませんファイル'バックパック-weight.txt' " << てendl; 61が 復帰 - 。1 ; 62れる } 63です FOUT2 .setf(ios_baseは:: 固定 ios_base :: FloatField、); // 科学表記用いてデジタル出力を防ぐ 64 のため(J = 0 ; J <T、J ++ ) 65 { 66 COUT << " ------ ------------で" <<J + 1 <<" TH -----------------テスト" << ENDL; 67 、M = 1 + RAND()%100000 ; // 記事の数が 68 Wが= 10 + RAND()%10万 ; // バックパックの総重量 69 FOUT1 M << << " " ; 70 FOUT2 <<(INT)W <<である" " ; 71はint型、液[M] 72 オブジェクトオブジェクト[M]; 73であるため(I = 0 ;私は<M; iが++ ) 74 { 75 オブジェクト [i]は.NO = I + 1 。 76 オブジェクト [i]は.VALUE = 1つの +ランド()%10000 。 77 オブジェクト [i]は.weight = 1つの +ランド()%10000 。 78 オブジェクト [i]は.average = オブジェクト [i]の.VALUE / オブジェクト[i]の.weight。 79 } 80 QueryPerformanceFrequency(&nFreq)。 81 QueryPerformanceCounterの(&nBeginTime)。 82 ソート(オブジェクト、オブジェクト + M、CMP)。 83 greedySelector(M、W、溶液、オブジェクト); 84 QueryPerformanceCounterの(&nEndTime)。 85 費用=(ダブル)(nEndTime.QuadPart - nBeginTime.QuadPart)/(ダブル)nFreq.QuadPart。 86 FOUT1 <<コスト<< てendl; 87 FOUT2 <<コスト<< てendl; 88 裁判所未満<< " 実行時間がある:" <<コスト<< " S " << てendl; 91 fout2.close()。 92 coutの<< てendl; 93 裁判所未満<< " 成功!" << てendl; 94 リターン 0 ; 95 }