Find Minimum Time to Finish All Jobs LeetCode solution in Python
1class Solution:2def minimumTimeRequired(self, jobs: List[int], k: int) -> int:3def branchAndBound(i: int):4nonlocal r5if i == n:6r = min(r, max(a))7return8visited = set()9for j in range(k):10if a[j] in visited:11continue12visited.add(a[j])13if a[j] + jobs[i] >= r:14continue15a[j] += jobs[i]16branchAndBound(i + 1)17a[j] -= jobs[i]1819n = len(jobs)20if n <= k:21return max(jobs)2223# use greed algorithm to get upper bound24jobs.sort(reverse=True)25a = list(jobs[:k])26for job in jobs[k:]:27m0 = min(a)28i = a.index(m0)29a[i] += job30r = max(a)3132a = [0] * k33branchAndBound(0)34return r