Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <unordered_map>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. typedef long long ll;
  10.  
  11. int main() {
  12. ll n;
  13. cin >> n;
  14. ll g[20][20];
  15. vector <vector <ll>> dp(1ll << n, vector<ll>(n, 1000000000)), last(1ll << n, vector<ll>(n, 0));
  16. for (ll i = 0; i < n; i++) {
  17. for (ll j = 0; j < n; j++) {
  18. cin >> g[i][j];
  19. }
  20. }
  21. dp[1][0] = 0;
  22. for (ll s = 0; s < (1ll << n); s++) {
  23. for (ll i = 0; i < n; i++) {
  24. if (!((s >> i) & 1ll))
  25. continue;
  26. for (ll j = 0; j < n; j++) {
  27. if (j == i || !((s >> j) & 1ll))
  28. continue;
  29. if (dp[s][i] > dp[s ^ (1ll << i)][j] + g[j][i])
  30. last[s][i] = j;
  31. dp[s][i] = min(dp[s][i], dp[s ^ (1ll << i)][j] + g[j][i]);
  32. }
  33. }
  34. }
  35. ll w = dp[(1ll << n) - 1][0], ans1 = 0;
  36. for (ll i = 1; i < n; i++) {
  37. if (w > dp[(1ll << n) - 1][i])
  38. ans1 = i;
  39. w = min(w, dp[(1ll << n) - 1][i]);
  40. }
  41. cout << w << '\n';
  42. for (ll i = 0; i < n; i++) {
  43. cout << ans1 + 1 << ' ';
  44. ans1 = last[(1 << n) - 1][ans1];
  45. }
  46. return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement