int dp[1050][105];
int TSP(int mask,int pos,int vis,vector<vector<int>>cost)
{
if(mask==vis)
{
return cost[pos][0];
}
if(dp[mask][pos]!=-1)
return dp[mask][pos];
int ans = INT_MAX;
for(int city=0;city<cost.size();city++){
if(mask & (1<<city)==0)
{
int newans = cost[pos][city] + TSP(mask|(1<<city),city,vis,cost);
ans = min(ans,newans);
}
}
return dp[mask][pos] = ans;
}
int total_cost(vector<vector<int>>cost){
// Code here
int n = cost.size();
int vis = (1<<n) - 1;
for(int i=0;i=(i<<1);i++)
{
for(int j=0;j<n;j++)
{
dp[i][j] = -1;
}
}
return TSP(1,0,vis,cost);
}
};