2016-09-18 61 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()));