Cod sursa(job #2083236)

Utilizator mateibanuBanu Matei Costin mateibanu Data 7 decembrie 2017 13:26:58
Problema Cast Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

#define MAX2 4096
#define INF 120020
int n,c[15][15],d[MAX2][15],m;

void read(){
    int i,j;
    scanf("%d",&n);
    m=1<<n;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
            scanf("%d",&c[i][j]);
}

void init(){
    int i,j;
    for (i=1;i<m;i++)
        for (j=0;j<n;j++) d[i][j]=INF;
}

void solve(){
    int i,j,multime,k;
    for (i=1;i<m;i++){
        for (j=0;j<n;j++){
            if (i&(1<<j)){
                if (i==(1<<j)){
                    d[i][j]=0;
                    continue;
                }
                d[i][j]=INF;
                for (multime=i^(1<<j);multime;multime=(multime-1)&(i^(1<<j)))
                    for (k=0;k<n;k++)
                        if (multime&(1<<k)) d[i][j]=min(d[i][j],c[j][k]+max(d[multime][k],d[i^multime][j]));

            }
        }
    }
    printf("%d\n",d[m-1][0]);
}

int main()
{
    freopen("cast.in","r",stdin);
    freopen("cast.out","w",stdout);
    int t;

    scanf("%d",&t);
    while (t){
        t--;
        read();
        init();
        solve();
    }
    return 0;
}