문제 : https://www.acmicpc.net/problem/10819


[알고리즘풀이]

Input 범위가 작으므로, Backtracking을 이용해서 가능한 모든 배열 순서를 탐색한다.

#include<iostream>
#include<vector>
#include<cmath>

using namespace std;

vector<int> v;
bool check[8];
int n, ans = -1, A[8];

void bt(void) {
	if (v.size() == n) {
		int temp = 0;
		for (int i = 0; i < n - 1; i++) {
			temp += (int)(abs(A[v[i]] - A[v[i + 1]]));
		}
		if (temp > ans)
			ans = temp;
		return;
	}
	for (int i = 0; i < n; i++) {
		if (check[i] == false) {
			v.push_back(i);
			check[i] = true;
			bt();
			check[i] = false;
			v.pop_back();
		}
	}
	return;
}
int main(void) {
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> A[i];

	for (int i = 0; i < n; i++) {
		v.push_back(i);
		check[i] = true;
		bt();
		check[i] = false;
		v.pop_back();
	}
	cout << ans;

}

 

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 1914 - 하노이 탑  (0) 2019.10.01
[BOJ] 2003 - 수들의 합  (0) 2019.09.30
[BOJ] 1520 - 내리막 길  (0) 2019.09.29
[BOJ] 2522 - '별 찍기 - 12'  (0) 2019.09.29
[BOJ] 13458 - 시험 감독  (0) 2019.09.29

+ Recent posts