Advertisement
Ankit_132

D

Sep 2nd, 2023
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. #define ll     long long
  6.  
  7. int main()
  8. {
  9.     int n;
  10.     cin>>n;
  11.  
  12.     vector<vector<ll int>> edge(n, vector<ll int> (n));
  13.     int tmp;
  14.  
  15.     for(int i=0; i<n-1; i++)
  16.     {
  17.         for(int j=i+1; j<n; j++)
  18.         {
  19.             cin>>tmp;
  20.             edge[i][j] = edge[j][i] = tmp;
  21.         }
  22.     }
  23.  
  24.     vector<ll int> dp ((1<<n), -1);
  25.  
  26.     function<ll int(int)> solve = [&](int mask)
  27.     {
  28.         if(mask+1 == (1<<n))      return 0ll;
  29.         if(dp[mask] != -1)        return dp[mask];
  30.  
  31.         int i = -1;
  32.         for(int b=0; b<n; b++)
  33.         {
  34.             if(((1<<b)&mask) == 0)
  35.             {
  36.                 i = b;
  37.                 break;
  38.             }
  39.         }
  40.  
  41.         if(i == -1)               return 0ll;
  42.  
  43.         dp[mask] = max(0ll, solve(mask|(1<<i)));
  44.  
  45.         for(int j=0; j<n; j++)
  46.         {
  47.             if(j==i || (mask&(1<<j))>0)     continue;
  48.             dp[mask] = max(dp[mask], edge[i][j] + solve(mask|(1<<j)|(1<<i)));
  49.         }
  50.  
  51.         return dp[mask];
  52.     };
  53.  
  54.     cout<<solve(0)<<"\n";
  55. }
  56.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement