시간 초과가 왜 나지 고민하다가 팀원 능력치 더하는 부분을 바꿔봤는데도 시간 초과
아예 재귀 부분 for문에서 시간 초과가 나는듯해서 for문의 시작 지점을 현재 멤버로 교체해서 통과
굳이 똑같은 부분을 반복하고 있었다..
#include <iostream>
#include <algorithm>
using namespace std;
int N, S[21][21], team[21], minStats = 1000000, teamStats1, teamStats2;
void subStats() {
teamStats1 = 0;
teamStats2 = 0;
for (int i=0; i<N; i++) {
for (int j=i; j<N; j++) {
if (team[i] == 0 && team[j] == 0) {
teamStats1 += S[i][j];
}
else if (team[i] == 1 && team[j] == 1) {
teamStats2 += S[i][j];
}
}
}
}
void backtracking(int memberCount, int member) {
if (memberCount == N/2) {
subStats();
minStats = min(minStats, abs(teamStats1 - teamStats2));
return;
}
for (int i = member + 1; i<N; i++) {
if (team[i] != 1) {
team[i] = 1;
backtracking(memberCount + 1, i);
team[i] = 0;
}
}
}
int main(int argc, const char * argv[]) {
cin >> N;
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
cin >> S[i][j];
if (i > j) {
S[j][i] += S[i][j];
}
}
}
backtracking(0, 0);
cout << minStats << "\n";
return 0;
}
'ALGORITHM > DFS, BFS' 카테고리의 다른 글
[c++] 타겟 넘버 (프로그래머스 - dfs) (0) | 2021.06.29 |
---|---|
2580 스도쿠 (0) | 2021.01.18 |
9663 N-Queen (0) | 2021.01.16 |
15649 N과 M (1) (0) | 2021.01.12 |
17267 상남자 (1) | 2021.01.07 |