본문 바로가기

ALGORITHM/DFS, BFS

14889 스타트와 링크

시간 초과가 왜 나지 고민하다가 팀원 능력치 더하는 부분을 바꿔봤는데도 시간 초과

아예 재귀 부분 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