2016-09-18 2 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())); 
Смежные вопросы