#include #include //小数点出力用 //cout << fixed << setprecision(10) << ans; #include #include #include #include #include #include #include #include using ll = long long; using namespace std; #define modPHash (ll)((1LL<<61)-1) #define modP (ll)998244353 bool chkrng0idx(int pos, int sup) { return (0 <= pos && pos < sup); } int clk4(int num) { return (num - 2) * (num % 2); } void yn(bool tf) { cout << (tf ? "Yes\n" : "No\n"); } int popCount(int x) { int res = 0; while (x != 0) { if (x & 1)res++; x >>= 1; } return res; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int N; cin >> N; int dp[1 << 16][16] = { 0 }; int D[16][16]; for (int i = 0;i < N;i++) { for (int j = 0;j < N;j++) { cin >> D[i][j]; } } for (int k = 0;k < (1 << N);k++) { for (int i = 0;i < N;i++) { dp[k][i] = 1e9; } } for (int i = 0;i < N;i++) { dp[1 << i][i] = 0; } for (int k = 1;k < (1 << N);k++) { for (int i = 0;i < N;i++) { if ((k >> i) & 1) { for (int j = 0;j < N;j++) { if (i == j)continue; if ((k >> j) & 1) { dp[k][i] = min(dp[k][i], dp[k - (1 << i)][j] + popCount(k - (1 << i)) * D[i][j]); } } } } } cout << dp[(1 << N) - 1][0]; }