Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- cin >> n;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) cin >> w[i][j];
- }
- for (int i = 0; i < n; i++)
- for (int j = 0; j < (1<<n); j++) dp[i][j] = INF;
- dp[0][0] = 0;
- for (int mask = 0; mask < (1<<n); mask++){
- for (int v = 0; v < n; v++) {
- if (mask & (1 << v)){
- for (int u = 0; u < n; u++){
- if ((mask & (1 << u)) && (u != v))
- dp[v][mask] = min(dp[v][mask], w[v][u] + dp[u][mask ^ (1 << v)]);
- }
- }
- }
- }
- long long ans = INF;
- for (int v = 0; v < n; v++) ans = min(ans, dp[v][(1<<n) - 1]);
- cout << ans << '\n';
- return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement