Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[BOJ 10819] 차이를 최대로 (C++) 본문

Problem Solving

[BOJ 10819] 차이를 최대로 (C++)

흑개 2021. 10. 12. 15:51

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

 

10819번: 차이를 최대로

첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

www.acmicpc.net

#include <iostream>
#include <vector>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

int arr[10];
bool visit[10];
int answer = -1;
vector<int> v;
int N;

int calc() {
	int sum = 0;
	for (int i = 0; i <= N - 2; i++) {
		sum += abs(v[i] - v[i + 1]);
	}
	return sum;
}

void dfs(int cnt) {
	if (cnt == N) {
		answer = max(answer, calc());
		return;
	}
	for (int i = 0; i < N; i++) {
		if (!visit[i]) {
			v.push_back(arr[i]);
			visit[i] = true;
			dfs(cnt + 1);
			visit[i] = false;
			v.pop_back();
		}
	}

}

int main() {
	memset(visit, false, sizeof(visit));
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}
	dfs(0);
	cout << answer << "\n";
	return 0;
}

 

순열 문제.

8!=4만 얼마로, 충분히 모든 경우의 수를 고려해서 최대값을 구할 수 있다.

순열은 늘 그렇듯이 dfs로 구해준다.

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

[BOJ 16637] 괄호 추가하기 (C++)  (0) 2021.10.14
[BOJ 16235] 나무 재테크 (C++)  (0) 2021.10.12
[BOJ 9663] N-Queen (C++)  (0) 2021.10.12
[BOJ 15684] 사다리 조작 (C++)  (0) 2021.10.11
[프로그래머스] 튜플 (C++)  (0) 2021.10.07