728x90
반응형
#include <iostream>
#include <vector>
using namespace std;
int ss[21][21];
int n;
bool isused[21];
int result = 2e9;
void count(){
vector<int> s, l;
int stot = 0, ltot = 0;
for(int i=1; i<=n; i++){ // 스타트팀, 링크팀 나누기
if(isused[i]) s.push_back(i);
else l.push_back(i);
}
for(int i=0; i<s.size()-1; i++){ // 스타트팀 능력치 합
for(int j=i+1; j<s.size(); j++){
stot = stot + ss[s[i]][s[j]] + ss[s[j]][s[i]];
}
}
for(int i=0; i<l.size()-1; i++){ // 링크팀 능력치 합
for(int j=i+1; j<l.size(); j++){
ltot = ltot + ss[l[i]][l[j]] + ss[l[j]][l[i]];
}
}
result = min(result, abs(stot - ltot));
}
void divide(int k, int tot){ // 스타트팀에 k번 포함, tot명수
if(tot==n/2){
count();
return;
}
for(int i=k+1; i<=n; i++){
isused[i] = true;
divide(i, tot+1);
isused[i] = false;
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
cin >> ss[i][j];
}
}
for(int i=1; i<n; i++){
divide(i, 0);
}
cout << result;
return 0;
}
728x90
반응형
'알고리즘 > 백트래킹' 카테고리의 다른 글
[백준/구현/백트래킹/C++] 15686번 치킨배달 (삼성 SW 역량 테스트 기출) (0) | 2023.01.19 |
---|---|
[백준/구현/백트래킹/C++] 1759번 암호 만들기 (0) | 2023.01.18 |
[백준/백트래킹/C++] 15661번 링크와 스타트 * (0) | 2023.01.18 |
[백준/백트래킹/C++] 14888번 연산자 끼워넣기 (삼성 SW 역량 테스트 기출) (0) | 2023.01.13 |
[백준/백트래킹/C++] 퇴사 (삼성 SW 역량 테스트 기출) (0) | 2023.01.13 |