-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution1125.cs
46 lines (38 loc) · 1.2 KB
/
Solution1125.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System.Text;
using LeetCode.DataStructures;
namespace LeetCode.Solutions;
public class Solution1125
{
/// <summary>
/// 1125. Smallest Sufficient Team - Hard
/// <a href="https://leetcode.com/problems/smallest-sufficient-team">See the problem</a>
/// </summary>
public int[] SmallestSufficientTeam(string[] req_skills, IList<IList<string>> people)
{
var n = req_skills.Length;
var m = people.Count;
var dp = new Dictionary<int, List<int>> { [0] = [] };
var skillMap = new Dictionary<string, int>();
for (var i = 0; i < n; i++)
{
skillMap[req_skills[i]] = i;
}
for (var i = 0; i < m; i++)
{
var skill = 0;
foreach (var s in people[i])
{
skill |= 1 << skillMap[s];
}
foreach (var (key, value) in new Dictionary<int, List<int>>(dp))
{
var newSkill = key | skill;
if (!dp.ContainsKey(newSkill) || dp[newSkill].Count > value.Count + 1)
{
dp[newSkill] = [.. value, i];
}
}
}
return [.. dp[(1 << n) - 1]];
}
}