Cod sursa(job #176448)

Utilizator gigi_becaliGigi Becali gigi_becali Data 11 aprilie 2008 11:50:58
Problema Cc Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
using namespace std;
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#define N 101

int a[N][N];
int n;
int perm[N][N];

inline int f(int p)
{
	int i;
	int s=0;
	for(i=1;i<=n;++i)
		s+=a[i][perm[p][i]];
	
	return s;
}


void init()
{
	int i, j;
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
			perm[i][j]=j;
		
	for(i=1;i<=n;++i) random_shuffle(perm[i]+1, perm[i]+n+1);
			
}

inline void mutatie(int i)
{
	int p=rand()%n+1;
	int q=rand()%n+1;
		
	int t=perm[i][p];
	perm[i][p]=perm[i][q];
	perm[i][q]=t;
}



void solve()
{
	init();
	int i,j,k, smin=0x3f3f3f3f;
	for(i=1;i<=1000;++i)
	{
		for(j=1;j<=n;++j) 
		{
			for(k=1;k<=n;++k) mutatie(k);
			if(smin>f(j)) smin=f(j);
		}
		
	}
		
	freopen("cc.out","w",stdout);
	printf("%d\n", smin);
	
}

int main()
{
	srand(99);
	freopen("cc.in","r",stdin);
	scanf("%d\n", &n);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j) scanf("%d ", &a[i][j]);
	
	solve();
	return 0;
}