假设我有两个数组/向量,如下:
A[4]={4,6,9,7};
B[4]={12,4,9,3};
我必须从这两个数组中取两个项目,并且不会是相同的索引(如果我取A,那么我就不能取B),并且这个组合的和将是最小值。
假设,
From A we took, A[0] and A[2]
From B we took, B[1] and B[3]
然后它会给出最小的结果:20
我如何用next_permutation
解决这个问题?
发布于 2016-09-18 17:41:17
你可以使用下面的代码来迭代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()));
https://stackoverflow.com/questions/39559030
复制相似问题