# DFS # 브루트 포스
n이 작아서 완전 탐색으로 모든 경우 훑어도 됩니다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <math.h>
#include <limits.h>
#include <string.h>
#include <string>
#include <sstream>
#define MAX 55
#define INF 2123456789
using namespace std;
typedef long long ll;
int n,mi=INF,val[MAX][MAX];
bool a[MAX];
// dfs를 이용하여 팀의 조합을 탐색한다.
void dfs(int cur,int cnt){
if(cnt==n/2)
{
int suma=0,sumb=0;
// 팀이 완성되었을때 a팀과 b팀의 합을 구해 차이를 구해준다.
for(int i=1;i<=20;i++){
for(int j=1;j<=20;j++) {
if (a[i] && a[j])
suma += val[i][j];
if(!a[i]&&!a[j])
sumb += val[i][j];
}
}
mi=min(mi,abs(suma-sumb));
return;
}
for(int i=cur;i<=n;i++) {
a[i]=true;
dfs(i + 1, cnt + 1);
a[i]=false;
}
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
scanf("%d",&val[i][j]);
}
dfs(1,0);
printf("%d",mi);
return 0;
}'IT > BOJ' 카테고리의 다른 글
| 백준(BOJ) 14891 톱니바퀴 * (0) | 2019.03.25 |
|---|---|
| 백준(BOJ) 14890 경사로 ** (0) | 2019.03.22 |
| 백준(BOJ) 14888 연산자 끼워넣기 * (0) | 2019.03.21 |
| 백준(BOJ) 13458 로봇 청소기 ** (0) | 2019.03.20 |
| 백준(BOJ) 13458 시험 감독 * (0) | 2019.03.18 |