Life Engineering
[BOJ 10819] 차이를 최대로 (C++) 본문
https://www.acmicpc.net/problem/10819
#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 |