-
#include<iostream> #include<vector> using namespace std; int n; int s[100][100]; int ans = 987654321; void go(vector<int>& a, vector<int>& b, int sum, int suma, int idx) { if (idx == n + 1) { if (a.size() == b.size()) { if (ans > abs(sum - suma)) { ans = abs(sum - suma); return; } else return; } else return; } int temp = 0; for (int i = 0; i < a.size(); i++) { temp += s[idx][a[i]]; temp += s[a[i]][idx]; } sum += temp; a.push_back(idx); go(a, b, sum, suma, idx + 1); sum -= temp; a.pop_back(); temp = 0; for (int i = 0; i < b.size(); i++) { temp += s[idx][b[i]]; temp += s[b[i]][idx]; } suma += temp; b.push_back(idx); go(a, b, sum, suma, idx + 1); suma -= temp; b.pop_back(); temp = 0; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> s[i][j]; } } vector<int> a; vector<int> b; go(a, b, 0, 0, 1); cout << ans << '\n'; return 0; }
SWEA A형 테스트 준비하면서 다시풀어보면 백트래킹 문제
정말간단하지만 백트래킹의 정말정말 기초인듯 풀면서 편안해졌다.