Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- bool viz[20];
- int n, a[20], x[20], smn = 1000000;
- void print() {
- int s = 0;
- for(int i = 1; i < n; i += 2)
- if(a[x[i]]%a[x[i+1]] < a[x[i+1]]%a[x[i]])
- s = s + a[x[i]]%a[x[i+1]];
- else
- s = s + a[x[i+1]]%a[x[i]];
- if(smn > s)
- smn = s;
- }
- bool valid(int k) {
- if(k%2 == 0) {
- if(x[k-1] > x[k])
- return false;
- int s = 0;
- for(int i = 1; i < k; i += 2)
- if(a[x[i]]%a[x[i+1]] < a[x[i+1]]%a[x[i]])
- s = s + a[x[i]]%a[x[i+1]];
- else
- s = s + a[x[i+1]]%a[x[i]];
- if(s >= smn)
- return false;
- }
- if(k > 2 && k%2 == 1 && x[k-2] > x[k])
- return false;
- return true;
- }
- void back(int k) {
- for(int i = 2; i <= n; i++)
- if(!viz[i]) {
- x[k] = i;
- viz[i] = 1;
- if(valid(k)) {
- if(k < n)
- back(k+1);
- else
- print();
- }
- viz[i] = 0;
- }
- }
- int main() {
- cin >> n;
- for(int i = 1; i <= n; i++)
- cin >> a[i];
- x[1] = 1;
- viz[1] = 1;
- back(2);
- cout << smn;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement