백준 14889번: 스타트와 링크 / C++
2023. 2. 19. 23:27ㆍ개인공부/코딩테스트
14889번: 스타트와 링크 (acmicpc.net)
14889번: 스타트와 링크
예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.
www.acmicpc.net
백트래킹 문제로 탐색을 최소화하는 방법을 적용하여 풀이하였다.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#include <iostream>
#include <vector>
using namespace std;
int N, Minimum;
bool First = true;
vector<int> arr;
vector<bool>Select;
vector<int> StartTeam;
vector<int> LinkTeam;
void CulSynergy()
{
int S_Team = 0;
int L_Team = 0;
for (auto col = StartTeam.begin(); col != StartTeam.end(); ++col)
{
for (auto row = StartTeam.begin(); row != StartTeam.end(); ++row)
{
int index = *col * N + *row;
S_Team += arr[index];
}
}
for (auto col = LinkTeam.begin(); col != LinkTeam.end(); ++col)
{
for (auto row = LinkTeam.begin(); row != LinkTeam.end(); ++row)
{
int index = *col * N + *row;
L_Team += arr[index];
}
}
int Dif = abs(S_Team - L_Team);
if(First ==true)
{
Minimum = Dif;
First = false;
}
if (Minimum > Dif)
Minimum = Dif;
return;
}
void DFS(int num , int index)
{
if (num == N / 2) // StarTeam 과 LinkTeam 점수차이 계산
{
for (int i = 0; i < N; ++i)
{
if (Select[i] == true)
{
StartTeam.push_back(i);
}
else
{
LinkTeam.push_back(i);
}
}
CulSynergy();
StartTeam.clear();
LinkTeam.clear();
return;
}
for (int i = index; i < N; ++i)
{
if (Select[i] == true)
continue;
Select[i] = true;
DFS(num + 1, i+1);
Select[i] = false;
}
}
int main()
{
cin >> N;
for (int i = 0; i < N; ++i)
{
Select.push_back(false);
}
for (int i = 0; i < N * N; ++i)
{
int synergy = 0;
cin >> synergy;
arr.push_back(synergy);
}
DFS(0 , 0);
cout << Minimum;
return 0;
}
|
cs |
'개인공부 > 코딩테스트' 카테고리의 다른 글
백준 2579번 : 계단 오르기 / C++ (0) | 2023.02.20 |
---|---|
백준 24416번 : 알고리즘 수업 - 피보나치 수 1 / C++ (0) | 2023.02.20 |
백준 14888번 : 연산자 끼워넣기 (0) | 2023.02.19 |
백준 2580번 : 스도쿠 / C++ (0) | 2023.02.19 |
백준 9663번: N-Queen / C++ (0) | 2023.02.19 |