Advertisement
Guest User

Untitled

a guest
Jul 19th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define f first
  4. #define s second
  5. #define mkp make_pair
  6. #define pb push_back
  7. const int INF=1e9+7;
  8. using namespace std;
  9. long long i,n,mask,pos,new_pos,a[15][15],dp[100005][15],j,ans,last_mask,start;
  10. pair < ll, ll > way[100005][15];
  11. int main()
  12. {
  13. freopen("aquarium.in","r",stdin);
  14. freopen("aquarium.out","w",stdout);
  15. cin>>n;
  16. for (i=0;i<n;++i)
  17. for (j=0;j<n;++j)
  18. {
  19. cin>>a[i][j];
  20. }
  21. for( mask = 0;mask<(1<<n);++mask)
  22. for( i=0;i<n;++i)
  23. dp[mask][i] = INF;
  24. for( i=0;i<n;++i)
  25. dp[1<<i][i] = 0;
  26. for (mask=0;mask<(1<<n);++mask)
  27. {
  28. for (pos=0;pos<n;++pos)
  29. if (mask&(1<<pos))
  30. for (new_pos=0;new_pos<n;++new_pos)
  31. if (!(mask&(1<<new_pos)))
  32. if (dp[(mask|(1<<new_pos))][new_pos]>dp[mask][pos]+a[pos][new_pos])
  33. {
  34. dp[(mask|(1<<new_pos))][new_pos]=min(dp[(mask|(1<<new_pos))][new_pos],dp[mask][pos]+a[pos][new_pos]);
  35. way[(mask|(1<<new_pos))][new_pos]=mkp(mask,pos);
  36. }
  37. }
  38. ans = INF;
  39. for ( i=0;i<n;++i)
  40. {
  41. if (ans>dp[(1<<n)-1][i])
  42. {
  43. ans=dp[(1<<n)-1][i];
  44. start=i;
  45. }
  46. }
  47. // ans=min(ans,dp[(1<<n)-1][i]);
  48. cout<<ans<<endl;
  49. mask=(1<<n)-1;
  50. cout<<start+1<<" ";
  51. for (i=1;i<n;++i)
  52. {
  53. last_mask=mask;
  54. cout<<way[mask][start].s+1<<" ";
  55. mask=way[mask][start].f;
  56. start=way[last_mask][start].s;
  57.  
  58. }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement