블로그 언저리인 무언가
[백준/BOJ] 14889 스타트와 링크 본문
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