2016-09-18 63 views
0

假設我有兩個陣列/像載體:排列具有有限的項目之間的兩個陣列

A[4]={4,6,9,7}; 
B[4]={12,4,9,3}; 

我必須採取確切兩個項目來自這兩個陣列和不將是相同的索引(如果我帶A [ 0],那麼我不能拿B [0]),那個組合的總和最小。

假設,

From A we took, A[0] and A[2] 
From B we took, B[1] and B[3] 

然後它會給我的最小結果:20

如何我next_permutation解決呢?

回答

0

您可以使用以下來遍歷disjoinct對A和B:

enum E { A, B, None }; 

std::vector<E> es {E::A, E::A, E::B, E::B}; 
es.resize(a.size(), E::None); // es is sorted 

do { 
    std::cout << "checking:"; 
    int index = -1; 
    for (auto e : es) { 
     ++index; 
     switch (e) { 
      case E::A: std::cout << " A :" << index; 
      case E::B: std::cout << " B :" << index; 
     } 
    } 
    std::cout << std::endl; 
} while (std::next_permutation(es.begin(), es.end()));