https://www.acmicpc.net/problem/14889
14889번: 스타트와 링크
예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.
www.acmicpc.net
#include<iostream>
#include<vector>
using namespace std;
int n;
int arr[20][20] = {};
bool team[20] = {};
int result,min_sco = 999999;
void dfs(int idx ,int cnt) {
vector<int> start;
vector<int> link;
int start_sco = 0;
int link_sco = 0;
if ((n / 2) == cnt) {
for (int i = 0; i < n; i++) {
if (team[i] == true) {
start.push_back(i);
}
else {
link.push_back(i);
}
}
for (int i = 0; i < (n / 2); i++) {
for (int j = 0; j < (n / 2); j++) {
start_sco += arr[start[i]][start[j]];
link_sco += arr[link[i]][link[j]];
}
}
if (abs(start_sco - link_sco) < min_sco) {
min_sco = abs(start_sco - link_sco);
}
return;
}
for (int i = idx; i < n; i++) {
if (team[i]) {
continue;
}
else {
team[i] = true;
dfs(i, cnt + 1);
team[i] = false;
}
}
}
int main() {
cin >> n ;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
dfs(0, 0);
cout << min_sco;
}
c++로 도 풀었다!
이문제 삼성 기출인데 어렵다!
백트래킹에서 중요한거 어떤 인수가 들어갈지 어떻게 중단할지인데
그건 정했는데 팀원을 선정하는 조건이 어려웠다!
그래서 다른사람 블로그 참고해서 팀원을 선택했다!
어렵다 어려워
조건을
반응형
'코딩 > 백준 - c++' 카테고리의 다른 글
[백준] 1003번 피보나치 함수 - c++ (0) | 2022.03.23 |
---|---|
[백준] 1149번 RGB거리 - c++ (0) | 2022.03.23 |
[백준] 14888번 연산자 끼워넣기 - c++ (0) | 2022.03.22 |
[백준] 9663번 N-Queen - c++ (0) | 2022.03.21 |
[백준] 15651번 N과 M (3) - c++ (0) | 2022.03.20 |