Cod sursa(job #1720255)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 21 iunie 2016 20:31:48
Problema Cast Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>
#define INF 100000000
#define MAXN 12
int d[1<<MAXN][MAXN], m[MAXN][MAXN], v[MAXN];
inline int max2(int a, int b){
    if(a>b) return a;
    else return b;
}
inline int min2(int a, int b){
    if(a<b) return a;
    else return b;
}
int main(){
    int t, n, i, j, p, q, c;
    FILE *fin, *fout;
    fin=fopen("cast.in", "r");
    fout=fopen("cast.out", "w");
    fscanf(fin, "%d", &t);
    for(; t; t--){
        fscanf(fin, "%d", &n);
        for(i=0; i<n; i++){
            for(j=0; j<n; j++){
                fscanf(fin, "%d", &m[i][j]);
            }
        }
        for(i=1; i<(1<<n); i++){
            for(j=0; j<n; j++){
                if(i&(1<<j)){
                    if(i==(1<<j)) d[i][j]=0;
                    else{
                        d[i][j]=INF;
                        c=i^(1<<j);
                        for(p=c; p>0; p=(p-1)&c){
                            for(q=0; q<n; q++){
                                if(p&(1<<q)) d[i][j]=min2(d[i][j], m[j][q]+max2(d[i^p][j], d[p][q]));
                            }
                        }
                    }
                }
            }
        }
        fprintf(fout, "%d\n", d[(1<<n)-1][0]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}