Cod sursa(job #1254727)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 3 noiembrie 2014 12:10:53
Problema Cast Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>

#define inf 12000005
using namespace std;

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

inline int min(int a,int b){
    if(a<b)
        return a;
    return b;
}

inline int max(int a,int b){
    if(a>b)
        return a;
    return b;
}

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

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

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