#include <stdio.h> #include <iostream> #include <queue> #include <string.h> #include <math.h> using namespace std; int N; int relation[25][25]; vector<int> start_candidate; int Min = 99999999; void combination(int idx, int cnt) { if(cnt == N/2) { int start = 0; int link = 0; vector<int> link_candidate; int visited[25] = {0}; for(int i = 0; i < start_candidate.size(); i++) { for(int j = 0; j < start_candidate.size(); j++) { if(i == j) { continue; } start += relation[start_candidate[i]][start_candidate[j]]; } } for(int i = 0; i < start_candidate.size(); i++) { visited[start_candidate[i]] = 1; } for(int i = 1; i <= N; i++) { if(visited[i] == 0) { link_candidate.push_back(i); } } for(int i = 0; i < link_candidate.size(); i++) { for(int j = 0; j < link_candidate.size(); j++) { if(i == j) { continue; } link += relation[link_candidate[i]][link_candidate[j]]; } } if(Min > abs(start-link)) { Min = abs(start-link); } return; } for(int i = idx; i <= N; i++) { start_candidate.push_back(i); combination(i+1, cnt+1); start_candidate.pop_back(); } } int main(void) { // freopen("B14889_input.txt", "r", stdin); cin >> N; for(int i = 1; i <= N; i++) { for(int j = 1; j <= N; j++) { cin >> relation[i][j]; } } combination(1, 0); cout << Min; return 0; } | cs |
'Baekjoon > BruteForce' 카테고리의 다른 글
[백준 1062] 가르침 (조합) (C/C++) (0) | 2020.03.24 |
---|---|
[백준 1018] 체스판 다시 칠하기 (Brute Force) (C/C++) (0) | 2020.03.24 |
[백준 1251] 단어 나누기 (조합) (C/C++) (★) (0) | 2020.03.23 |
[백준 1041] 주사위 (조합) (C/C++) (0) | 2019.12.18 |
[백준 15683] 감시 (순열) (C/C++) (★★★) (1) | 2019.11.21 |