Cod sursa(job #1253799)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 1 noiembrie 2014 20:06:33
Problema Cast Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 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=((i-1)&i);j;j=(j-1)&i){
                    /*stare=0;
                    for(k=1;k<=poz;k++)
                        if(j&(1<<(k-1)))
                            stare+=(1<<(v[k]-1));*/

                    for(k=1;k<=n;k++)
                        if(j&(1<<(k-1)))
                            for(l=1;l<=n;l++)
                                if(!(j&(1<<(l-1))))
                                    din[i][k]=min(din[i][k],c[k][l]+max(din[j][k],din[i^j][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;
}