C ++貪欲アルゴリズムナップザック問題のセクション

_(:から」∠)_

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 }

 

おすすめ

転載: www.cnblogs.com/Jesse-Cavendish/p/11791050.html