01ナップザック問題(DFS +プルーニング)

01ナップザック問題

DFSソリューション

1の#include <iostreamの>
 2の#include <CStringの>
 3の#include <アルゴリズム>
 4の#include <cmath>
 5  
6  使用して 名前空間STDを、
7      
8  CONST  INT = N 1010 9  
10  のint V [N] W [N]、。
11  INT N、V。
12  INT ANS = 0 13の 
14  空隙 DFS(int型 IDX、int型 H、INT M){
 15      であれば(IDX == N){
 16         リターン;
 17      }
 18である      DFS(+ IDX 。1 、H、M); //ない最初の分岐は、現在選択されている項目を表す
 。19      IF(H + V [IDX <= V){物品ナップザックよりも電流容量の大きいへ//のみ等しい電流第二のブランチに入る前にボリューム、
 20は、         IF(ANS <M + W [IDX]){
 21は              ANS = M + W [IDX];
 22である         }
 23れる          DFS(IDX + 1、H + V [IDX]、M + W [IDX] );
 24      }
 25  }
 26である 
27  INT メイン(){
 28      CIN >> N- V;
 29      
30      のためにINT I = 0; I <N; I ++ ){
 31          CIN >> V [i]は、
32      }
 33      のためにINTは iは= 0、I <N; I ++ ){
 34          CIN >> [I] W。
35      }
 36の     
37      DFS(000 );
38の     
39      COUT << ANS << ENDL。
40      
41      戻り 0 ;    
42 }

 

...

おすすめ

転載: www.cnblogs.com/gulangyuzzz/p/12056152.html