🔥🔥🔥C++ | clean code | HARD🥵🥵🥵 |  self-explanatory🏆🏆🏆
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\nclass Solution {\nprivate:\n    int smallestTeam(int i, vector<int>& skills, int req, int mask, int dp[][62], bool choice[][62]){\n        if(mask == req) return 0;\n        if(i == skills.size()) return 10000;\n        if(dp[mask][i] != -1) return dp[mask][i];\n\n        int pick = 1 + smallestTeam(i+1,skills,req,(mask|skills[i]),dp,choice);\n        int skip = 0 + smallestTeam(i+1,skills,req,mask,dp,choice);\n\n        if(pick < skip){\n            choice[mask][i] = 1;\n        }\n\n        return dp[mask][i] = min(pick,skip);\n    }\npublic:\n    vector<int> smallestSufficientTeam(vector<string>& req_skills, vector<vector<string>>& people) {\n        unordered_map<string,int> mp;\n        int n = req_skills.size();\n        for(int i=0; i<n; i++){\n            mp[req_skills[i]] = i;\n        }\n        int sz = people.size();\n        vector<int> skills;\n\n        for(int i=0; i<sz; i++){\n            int mask = 0;\n            for(int j=0; j<people[i].size(); j++){\n                mask |= (1<<mp[people[i][j]]);\n            }\n            skills.push_back(mask);\n        }\n\n        int dp[(1<<16)][62];\n        bool choice[1<<16][62] = {{0}};\n\n        memset(dp,-1,sizeof(dp));\n        smallestTeam(0,skills,(1<<n)-1,0,dp,choice);\n\n        int mask = 0;\n        vector<int> ans;\n        for(int i=0; i<sz; i++){\n            if(choice[mask][i]){\n                mask |= skills[i];\n                ans.push_back(i);\n                if(mask == (1<<n)-1) return ans;\n            }\n        }\n        return ans;\n\n    }\n};\n```
['Array', 'Dynamic Programming', 'Bit Manipulation', 'Bitmask', 'C++']