C# Solution
C# Implementation of https://leetcode.com/problems/smallest-sufficient-team/discuss/334572/Python-DP-Solution\n\npublic static int[] SmallestSufficientTeam(stri
C# Implementation of https://leetcode.com/problems/smallest-sufficient-team/discuss/334572/Python-DP-Solution\n```\npublic static int[] SmallestSufficientTeam(string[] req_skills, IList<IList<string>> people)\n        {\n            int ns = req_skills.Length, np = people.Count;\n            var map = new Dictionary<string, int>();\n            for (int i = 0; i < ns; ++i)\n                map.Add(req_skills[i], i);\n\n            var suff = new List<List<int>>();\n            int len = 1 << ns;\n            for (int i = 0; i < len; i++)\n                suff.Add(null);\n            suff[0] = new List<int>();\n\n            for (int i = 0; i < np; ++i)\n            {\n                int skill = 0;\n                foreach (string s in people[i])\n                    skill |= (1 << map[s]);\n                for (int prev = 0; prev < suff.Count; ++prev)\n                {\n                    if (suff[prev] == null)\n                        continue;\n                    int comb = prev | skill;\n                    if (suff[comb] == null || suff[prev].Count + 1 < suff[comb].Count)\n                    {\n                        suff[comb] = new List<int>(suff[prev]);\n                        suff[comb].Add(i);\n                    }\n                }\n            }\n            var res = suff[(1 << ns) - 1];\n            int[] arr = new int[res.Count()];\n            for (int i = 0; i < arr.Length; ++i)\n                arr[i] = res[i];\n\n            return arr;\n        }\n```
[]