具有有限项的两个数组之间的排列

时间:2016-09-18 14:57:37

标签: c++ algorithm stl

假设我有两个数组/向量,如:

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解决问题?

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容迭代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()));