假设我有两个数组/向量,如:
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 :(得分: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()));