
예제 입력 1
4
0 1 2 3
4 0 5 6
7 1 0 2
3 4 5 0
예제 출력 1
0
예제 입력 2
6
0 1 2 3 4 5
1 0 2 3 4 5
1 2 0 3 4 5
1 2 3 0 4 5
1 2 3 4 0 5
1 2 3 4 5 0
예제 출력 2
2
예제 입력 3
8
0 5 4 5 4 5 4 5
4 0 5 1 2 3 4 5
9 8 0 1 2 3 1 2
9 9 9 0 9 9 9 9
1 1 1 1 0 1 1 1
8 7 6 5 4 0 3 2
9 1 9 1 9 1 0 9
6 5 4 3 2 1 9 0
예제 출력 3
1
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int line;
int layer[20][20];
int lower_value = 500;
bool team[20];
void teamset(int mem, int fight_mem)
{
vector<int> start;
vector<int> link;
int start_score = 0;
int link_score = 0;
if (fight_mem == line/2)
{
for(int i = 0 ; i < line ; i++)
{
if(team[i]==true)
{
start.push_back(i);
}
else
{
link.push_back(i);
}
}
for(int i = 0 ; i<line/2 ; i++)
{
for(int j = 0 ; j<line/2 ; j++)
{
start_score+=layer[start[i]][start[j]];
link_score+=layer[link[i]][link[j]];
}
}
lower_value = min(lower_value,(abs(start_score-link_score)));
return;
}
for(int i = mem ; i < line ; i++)
{
if(team[i])
{
continue;
}
else
{
team[i]=true;
teamset(i,fight_mem+1);
team[i]=false;
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cin>>line;
for(int i = 0 ; i<line;i++)
{
for(int j = 0 ; j<line;j++)
{
cin>>layer[i][j];
}
}
teamset(0,0);
cout<<lower_value;
}

예제 입력 1
4
0 1 2 3
4 0 5 6
7 1 0 2
3 4 5 0
예제 출력 1
0
예제 입력 2
6
0 1 2 3 4 5
1 0 2 3 4 5
1 2 0 3 4 5
1 2 3 0 4 5
1 2 3 4 0 5
1 2 3 4 5 0
예제 출력 2
2
예제 입력 3
8
0 5 4 5 4 5 4 5
4 0 5 1 2 3 4 5
9 8 0 1 2 3 1 2
9 9 9 0 9 9 9 9
1 1 1 1 0 1 1 1
8 7 6 5 4 0 3 2
9 1 9 1 9 1 0 9
6 5 4 3 2 1 9 0
예제 출력 3
1
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int input_value[20][20];
int input_count;
int output_answer=50;
bool are_you[20];
void teamset(int count)
{
vector<int> link;
vector<int> start;
int link_score = 0;
int start_score = 0;
if(count==input_count)
{
for(int i=0;i<input_count;i++)
{
if(are_you[i]==true)
link.push_back(i);
else
start.push_back(i);
}
if(link.size()==0 || start.size()==0)
{
return;
}
for(int i = 0;i<link.size();i++)
for(int j = 0;j<link.size();j++)
{
link_score+=input_value[link[i]][link[j]];
}
for(int i = 0;i<start.size();i++)
for(int j = 0;j<start.size();j++)
{
start_score+=input_value[start[i]][start[j]];
}
output_answer = min(output_answer,abs(link_score-start_score));
return;
}
are_you[count]=true;
teamset(count+1);
are_you[count]=false;
teamset(count+1);
}
int main()
{
cin>>input_count;
for(int i=0;i<input_count;i++)
{
for(int j=0;j<input_count;j++)
{
cin>>input_value[i][j];
}
}
teamset(0);
cout<<output_answer;
}