Cod sursa(job #1253724)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 1 noiembrie 2014 18:38:57
Problema Cast Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>

#define inf 12000005
using namespace std;

int c[15][15];
int din[4105][15];

int main()
{
    ifstream cin("cast.in");
    ofstream cout("cast.out");

    ios_base::sync_with_stdio(false);

    int t=0;
    cin>>t;

    int n=0,i,j,k,l,stare;

    int v[15];
    int poz;

    while(t--){
        cin>>n;

        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                cin>>c[i][j];

        for(i=0;i<4105;i++)
            for(j=0;j<15;j++)
                din[i][j]=inf;

        for(i=1;i<(1<<n);i++)
            if(i&(i-1)){
                poz=0;
                for(j=1;j<=n;j++)
                    if((1<<(j-1))&i)
                        v[++poz]=j;

                for(j=1;j<(1<<poz)-1;j++){
                    stare=0;
                    for(k=1;k<=poz;k++)
                        if(j&(1<<(k-1)))
                            stare+=(1<<(v[k]-1));

                    for(k=1;k<=poz;k++)
                        if(j&(1<<(k-1)))
                            for(l=1;l<=poz;l++)
                                if(!(j&(1<<(l-1))))
                                    din[i][v[k]]=min(din[i][v[k]],c[v[k]][v[l]]+max(din[stare][v[k]],din[i-stare][v[l]]));
                }
            }
            else for(j=1;j<=n;j++)
                    if((1<<(j-1))&i)
                        din[i][j]=0;

        cout<<din[(1<<n)-1][1]<<'\n';
    }

    cin.close();
    cout.close();
    return 0;
}