sysout.초코우유 2018. 12. 21. 22:06

비효율적이지만 샘플은 잘 돌아가는 코드.

채점 결과는 당연히 시간초과. 큰 수에 대해서 계산이 시간 안에 끝날 수가 없다.



#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define ABIL_MAX 20000; // since a team has at most 10 people 
						// and each pair increases 100 ability points.
						// For safety, define max to bo 10*10*100*2
int main(){
	int n;
	cin >> n;
	
	vector<vector<int> > abil(n,vector<int>(n));
	for(int i = 0; i < n; i++){
		for(int j = 0; j < n; j++){
			cin >> abil[i][j];
		}
	}
	
	vector<int> memb;
	for(int i = 0;i < n; i++){
		memb.push_back(i);
	}
	
	int diff=ABIL_MAX;
	
	do{
		int abil1=0, abil2=0;
		int cur_diff=0;
		for(int i = 0; i < n/2; i++){
			for(int j = 0; j < n/2; j++){
				abil1 += abil[memb[i]][memb[j]];
				abil2 += abil[memb[n/2+i]][memb[n/2+j]];
			}
		}
		cur_diff = abil1<abil2 ? abil2-abil1 : abil1-abil2;
		diff = diff<cur_diff ? diff : cur_diff;
	} while( next_permutation( memb.begin() , memb.end() ) );
	
	cout << diff;
	return 0;
}