Notice
Recent Posts
Recent Comments
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 14889 스타트와 링크 본문

Programming/BOJ

[백준/BOJ] 14889 스타트와 링크

he1fire 2020. 9. 21. 16:06
728x90

문제 : 14889 스타트와 링크

 

14889번: 스타트와 링크

예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.

www.acmicpc.net

짝수인 수의 사람이 주어졌을 때, 절반으로 나눠 각 팀 능력치

합의 차이가 최소일 때 그 값을 출력하는 문제이다.

next_permutation을 사용해 모든 경우의 수를 구하고 

각 경우의 능력치 차이를 구해 최솟값을 갱신한 후 출력하면 된다.


Code

#include <bits/stdc++.h>
#define ll long long
#define INF 987654321
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    ll N, arr[25][25], ans=INF;
    vector<ll> chk;
    cin >> N;
    for (int i=0;i<N;i++){
        for (int j=0;j<N;j++){
            cin >> arr[i][j];
        }
    }
    for (int i=0;i<N/2;i++){
        chk.push_back(0);
    }
    for (int i=0;i<N/2;i++){
        chk.push_back(1);
    }
    do{
        ll cnt[2]={0,};
        for (int i=0;i<N;i++){
            for (int j=i+1;j<N;j++){
                if (chk[i]==chk[j]){
                    cnt[chk[i]]+=arr[i][j]+arr[j][i];
                }
            }
        }
        ans=min(abs(cnt[0]-cnt[1]),ans);
    }while (next_permutation(chk.begin(),chk.end()));
    cout << ans;
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 14890 경사로  (0) 2020.09.22
[백준/BOJ] 1057 토너먼트  (0) 2020.09.21
[백준/BOJ] 10779 쇠막대기  (0) 2020.09.21
[백준/BOJ] 1235 학생 번호  (0) 2020.09.21
[백준/BOJ] 1668 트로피 진열  (0) 2020.09.19
Comments