1+ import java .io .BufferedReader ;
2+ import java .io .IOException ;
3+ import java .io .InputStreamReader ;
4+ import java .util .Arrays ;
5+ import java .util .StringTokenizer ;
6+
7+ public class Main {
8+ static int minv = Integer .MAX_VALUE ;
9+
10+ public static void main (String [] args ) throws IOException {
11+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
12+ int N = Integer .parseInt (br .readLine ());
13+ StringTokenizer st ;
14+ int [][] Link = new int [N ][N ];
15+ int [] Team = new int [N ];
16+ for (int i = 0 ; i < N ; i ++) {
17+ st = new StringTokenizer (br .readLine ());
18+ int j = 0 ;
19+ while (st .hasMoreTokens ()) {
20+ Link [i ][j ] = Integer .parseInt (st .nextToken ());
21+ j ++;
22+ }
23+ }
24+ FindTeam (Link , Team , N , 0 , 0 );
25+ System .out .println (minv );
26+
27+
28+ }
29+
30+ private static void FindTeam (int [][] link , int [] team , int n , int r , int idx ) {
31+ if (r == n / 2 ) {
32+ FindIndex (team , link );
33+ return ;
34+ }
35+ for (int i = idx ; i < n ; i ++) {
36+ if (team [i ] == 0 ) {
37+ team [i ] = 1 ;
38+ FindTeam (link , team , n , r + 1 , i + 1 );
39+ team [i ] = 0 ;
40+ }
41+
42+
43+ }
44+ }
45+
46+ private static void FindIndex (int [] team , int [][] link ) {
47+ int teamA = 0 ;
48+ int teamB = 0 ;
49+ for (int i = 0 ; i < team .length ; i ++) {
50+ for (int j = i + 1 ; j < team .length ; j ++) {
51+ if (team [i ] == 1 && team [j ] == 1 ) {
52+ teamA += (link [i ][j ] + link [j ][i ]);
53+
54+ } else if (team [i ] == 0 && team [j ] == 0 ) {
55+ teamB += (link [i ][j ] + link [j ][i ]);
56+ }
57+ }
58+
59+ }
60+ int cac =Math .abs (teamA - teamB );
61+ minv =Math .min (minv ,cac );
62+ }
63+
64+
65+ }
0 commit comments