[14889] 스타트와 링크

Worldi·2021년 2월 12일
0

알고리즘

목록 보기
8/59
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<string>
#include<cstring>
#include<set>
#include<cstdlib>
#include<sstream>
using namespace std;


int  a[1000][1000];
int p[1001];
int n;
vector<int> first;;
vector<int>second;
long  long real = 100000000;
bool check() {
	return true;
}
void solve(int cnt ) {
	// 양쪽 반씩 뽑았을 때 
	// 반씩 중에서 확인
		//예외의 경우 
	//둘 중 하나 n/2 보다 큰 경우 
	if (first.size() > n / 2) return;
	if (second.size() > n / 2) return;

	if (cnt == n+1) {
		if (check()) {
			long  long  sum1 = 0;
			long long sum2 = 0;
			for (int i = 0; i < first.size(); i++) {
				for (int j = i + 1; j < first.size(); j++) {
					sum1 += a[first[i]][first[j]];
					sum1 += a[first[j]][first[i]];
				}
			}

			for (int i = 0; i < first.size(); i++) {
				for (int j = i + 1; j < first.size(); j++) {
					sum2 += a[second[i]][second[j]];
					sum2 += a[second[j]][second[i]];
				}
			}
		
			real = min(abs(sum1-sum2), real);
		}

		return;
	}
	if (cnt > n + 1) return;

	// 반씩 안뽑았다..
	// 그럼 뽑아줌.
	
	first.push_back(cnt);
	solve(cnt + 1);
	first.pop_back();
	second.push_back(cnt);
	solve(cnt + 1);
	second.pop_back();
}

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	cin >> n;
	for (int i = 1; i <= n; i++) {

		for (int j = 1; j <= n; j++) {
			cin >> a[i][j];
		}
	}

	solve(1);
	cout << real;
	return 0;
# }

여름방학 때까지만 해도 코드를 이해하지도 못했는데 이제 스스로 구현할 수 있다니!! 뿌듯하당 ㅠㅠㅠ

profile
https://worldi.tistory.com/ 로 블로그 이전합니다.

0개의 댓글