#include <stdio.h>
int n, c[105][105], X[105], visited[105];
int dis = 0;
int min = 1e9;
// Hàm tính chi phí nhỏ nhất cmin giữa các thành phố chưa đi qua
int findMin(int i){
int cmin = 1e9;
for(int j = 1; j<= n; j++){
if(c[i][j] < cmin){
cmin = c[i][j];
}
}
return cmin;
}
void Try(int i){
for(int j = 2; j<= n; j++){
if(visited[j] == 0){
X[i] = j;
visited[j] = 1;
dis += c[X[i-1]][X[i]];
// Tính chi phó nhỏ nhất cmin giữa các thành phố chưa đi qua
int cmin = findMin(X[i]); // cmin là chi phí nhỏ nhất từ thành phố hiện tại
// Nhánh cận: Kiểm tra nếu dis cộng với chi phí ước tính còn lại là lớn hơn min đang có ==> cắt nhánh
if(dis + (n-i+1)*cmin >= min){
dis -= c[X[i-1]][X[i]];
visited[j] = 0;
return; // cắt nhánh
}
if(i == n){
if(dis + c[X[i]][1] < min){
min = dis + c[X[i]][1];
}
}
else{
Try(i+1);
}
visited[j] = 0;
dis -= c[X[i-1]][X[i]];
}
}
}
int main(){
for(int i = 1; i<= n; i++){
for(int j = 1; j<= n; j++){
}
}
X[1] = 1;
visited[1] = 1;
Try(2);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbiwgY1sxMDVdWzEwNV0sIFhbMTA1XSwgdmlzaXRlZFsxMDVdOwppbnQgZGlzID0gMDsKaW50IG1pbiA9IDFlOTsKCi8vIEjDoG0gdMOtbmggY2hpIHBow60gbmjhu48gbmjhuqV0IGNtaW4gZ2nhu69hIGPDoWMgdGjDoG5oIHBo4buRIGNoxrBhIMSRaSBxdWEKaW50IGZpbmRNaW4oaW50IGkpewogICAgaW50IGNtaW4gPSAxZTk7CiAgICBmb3IoaW50IGogPSAxOyBqPD0gbjsgaisrKXsKICAgICAgICBpZihjW2ldW2pdIDwgY21pbil7CiAgICAgICAgICAgIGNtaW4gPSBjW2ldW2pdOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjbWluOwp9CnZvaWQgVHJ5KGludCBpKXsKICAgIGZvcihpbnQgaiA9IDI7IGo8PSBuOyBqKyspewogICAgICAgIGlmKHZpc2l0ZWRbal0gPT0gMCl7CiAgICAgICAgICAgIFhbaV0gPSBqOyAgCiAgICAgICAgICAgIHZpc2l0ZWRbal0gPSAxOyAgICAgICAgIAogICAgICAgICAgICBkaXMgKz0gY1tYW2ktMV1dW1hbaV1dOwogICAgICAgICAgICAvLyBUw61uaCBjaGkgcGjDsyBuaOG7jyBuaOG6pXQgY21pbiBnaeG7r2EgY8OhYyB0aMOgbmggcGjhu5EgY2jGsGEgxJFpIHF1YQogICAgICAgICAgICBpbnQgY21pbiA9IGZpbmRNaW4oWFtpXSk7ICAgLy8gY21pbiBsw6AgY2hpIHBow60gbmjhu48gbmjhuqV0IHThu6sgdGjDoG5oIHBo4buRIGhp4buHbiB04bqhaQogICAgICAgICAgICAvLyBOaMOhbmggY+G6rW46IEtp4buDbSB0cmEgbuG6v3UgZGlzIGPhu5luZyB24bubaSBjaGkgcGjDrSDGsOG7m2MgdMOtbmggY8OybiBs4bqhaSBsw6AgbOG7m24gaMahbiBtaW4gxJFhbmcgY8OzID09PiBj4bqvdCBuaMOhbmgKICAgICAgICAgICAgaWYoZGlzICsgKG4taSsxKSpjbWluID49IG1pbil7CiAgICAgICAgICAgICAgICBkaXMgLT0gY1tYW2ktMV1dW1hbaV1dOwogICAgICAgICAgICAgICAgdmlzaXRlZFtqXSA9IDA7CiAgICAgICAgICAgICAgICByZXR1cm47IC8vIGPhuq90ICBuaMOhbmgKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoaSA9PSBuKXsKICAgICAgICAgICAgICAgIGlmKGRpcyArIGNbWFtpXV1bMV0gPCBtaW4pewogICAgICAgICAgICAgICAgICAgIG1pbiA9IGRpcyArIGNbWFtpXV1bMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIFRyeShpKzEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZpc2l0ZWRbal0gPSAwOwogICAgICAgICAgICBkaXMgLT0gY1tYW2ktMV1dW1hbaV1dOwogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKXsKICAgIHNjYW5mKCIlZCIsICZuKTsKICAgIGZvcihpbnQgaSA9IDE7IGk8PSBuOyBpKyspewogICAgICAgIGZvcihpbnQgaiA9IDE7IGo8PSBuOyBqKyspewogICAgICAgICAgICBzY2FuZigiJWQiLCAmY1tpXVtqXSk7CiAgICAgICAgfQogICAgfQogICAgWFsxXSA9IDE7CiAgICB2aXNpdGVkWzFdID0gMTsKICAgIFRyeSgyKTsKICAgIHByaW50ZigiJWQiLCBtaW4pOwp9