Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- int main()
- {
- int n;
- cin>>n;
- vector<vector<ll int>> edge(n, vector<ll int> (n));
- int tmp;
- for(int i=0; i<n-1; i++)
- {
- for(int j=i+1; j<n; j++)
- {
- cin>>tmp;
- edge[i][j] = edge[j][i] = tmp;
- }
- }
- vector<ll int> dp ((1<<n), -1);
- function<ll int(int)> solve = [&](int mask)
- {
- if(mask+1 == (1<<n)) return 0ll;
- if(dp[mask] != -1) return dp[mask];
- int i = -1;
- for(int b=0; b<n; b++)
- {
- if(((1<<b)&mask) == 0)
- {
- i = b;
- break;
- }
- }
- if(i == -1) return 0ll;
- dp[mask] = max(0ll, solve(mask|(1<<i)));
- for(int j=0; j<n; j++)
- {
- if(j==i || (mask&(1<<j))>0) continue;
- dp[mask] = max(dp[mask], edge[i][j] + solve(mask|(1<<j)|(1<<i)));
- }
- return dp[mask];
- };
- cout<<solve(0)<<"\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement