Pagini recente » Cod sursa (job #766994) | Cod sursa (job #2316645) | Cod sursa (job #467533) | Cod sursa (job #48868) | Cod sursa (job #1245506)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("cast.in");
ofstream fout("cast.out");
const int MAX_N = 13;
const int INF = (1 << 30);
int d[MAX_N][(1 << MAX_N)];
int t[MAX_N][MAX_N];
int n;
int get(int r, int s) {
if(d[r][s] != INF) {
return d[r][s];
}
for(int r2 = 0; r2 < n; r2++) {
if((s & (1 << r2)) && r != r2) {
d[r][s] = min(d[r][s], t[r][r2] + max(get(r, s ^ (1 << r2)), get(r2, (1 << r2))));
int sn = s ^ (1 << r) ^ (1 << r2);
for(int y = sn; y != 0; y = (y - 1) & sn) {
int snn = y ^ (1 << r2);
d[r][s] = min(d[r][s], t[r][r2] + max(get(r, s ^ snn), get(r2, snn)));
}
}
}
return d[r][s];
}
int solve() {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
fin >> t[i][j];
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < (1 << n); j++) {
d[i][j] = INF;
}
}
for(int i = 0; i < n; i++) {
d[i][1 << i] = 0;
}
return get(0, (1 << n) - 1);
}
int main() {
int t;
for(fin >> t; t; t--) {
fin >> n;
fout << solve() << '\n';
}
return 0;
}