Pagini recente » Cod sursa (job #2693468) | Cod sursa (job #1128178) | Cod sursa (job #1944488) | Cod sursa (job #3202733) | Cod sursa (job #176466)
Cod sursa(job #176466)
using namespace std;
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#define N 101
int f2(int);
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;
}
inline int f2(int x[])
{
int s=0;
for(int i=1;i<=n;++i)
s+=a[i][x[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);
}
inline int swap(int i, int j, int x[])
{
int t=x[i];
x[i]=x[j];
x[j]=t;
}
void solve2()
{
int x[N];
int i, j;
for(i=1;i<=n;++i) x[i]=i;
random_shuffle(x+1,x+n+1);
int smin=f2(x),s=smin;
int p, q,t;
for(i=1;i<=5000000;++i)
{
p=rand()%n+1;
q=rand()%n+1;
s=smin;
s-=a[p][x[p]];
s-=a[q][x[q]];
swap(p,q,x);
s+=a[p][x[p]];
s+=a[q][x[q]];
if(s<smin) smin=s;
else swap(p, q,x);
}
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]);
solve2();
return 0;
}