백준알고리즘

스타트와 링크

먼지의삶 2019. 9. 5. 01:49
#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형 테스트 준비하면서 다시풀어보면 백트래킹 문제

정말간단하지만 백트래킹의 정말정말 기초인듯 풀면서 편안해졌다.