//https://www.acmicpc.net/problem/14889 #include <iostream> | |
#include <algorithm> | |
using namespace std; | |
int abs(int a, int b) { return (a-b)>(b-a)? (a-b):(b-a); } | |
int s[21][21]; | |
bool start[20]; | |
int ss;//start score | |
int ls;//link score | |
int n; | |
int mn=1e9; | |
void dfs(int idx, int depth); | |
int main() | |
{ | |
cin >> n; | |
for(int i=0; i<n; i++) | |
for(int j=0; j<n; j++){ | |
if(s[j][i]==0) cin >> s[i][j]; | |
else{ | |
int a; | |
cin >> a; | |
s[j][i]+=a; | |
} | |
} | |
for(int i=0; i<=n/2; i++){ | |
start[i]=true; | |
dfs(i, 1); | |
start[i]=false; | |
} | |
cout << mn; | |
return 0; | |
} | |
void dfs(int idx, int depth){ | |
if(depth==n/2){ | |
//능력치 계산 | |
for(int i=0; i<n; i++){ | |
if(start[i]) { | |
for(int j=0; j<n; j++){ | |
if(start[j]) ss+=s[i][j]; | |
} | |
} | |
else{ | |
for(int j=0; j<n; j++){ | |
if(!start[j]) ls+=s[i][j]; | |
} | |
} | |
} | |
mn=min(mn, abs(ss, ls)); | |
ss=0; | |
ls=0; | |
return; | |
} | |
for(int i=idx+1; i<n; i++){ | |
start[i]=true; | |
dfs(i, depth+1); | |
start[i]=false; | |
} | |
return; | |
} |
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
180407_13460_째로탈출 2 (0) | 2018.04.07 |
---|---|
180406_14716_현수막 (0) | 2018.04.07 |
180406_14502_연구소 (0) | 2018.04.06 |
180405_14501_퇴사 (0) | 2018.04.05 |
180404_14500_테트로미노 (0) | 2018.04.04 |