寻找在 Python 中完成所有工作的最短时间的程序
假设我们有一个名为jobs的数组,其中jobs[i]表示完成第i个作业所需的时间。我们还有另一个值k,我们可以为他们分配工作。每项工作都应该分配给一个工人。工人的工作时间是完成分配给他们的所有工作所需的总时间。我们必须找到任何任务的最短可能最长工作时间。
因此,如果输入类似于jobs=[2,1,3,8,5],k=2,那么输出将为10,因为我们可以分配如下作业:
工人1:2+5+3=10
工人2:1+8=9
所以最大时间是10。
示例
让我们看下面的实现来更好地理解
def solve(jobs, k):
jobs.sort(reverse=True)
assign = tuple(jobs[:k])
jobs = jobs[k:]
def dp(i, assign):
if i == len(jobs):
return max(assign)
ans = float('inf')
for x in range(k):
assign = list(assign)
assign[x] += jobs[i]
ans = min(ans, dp(i+1, tuple(assign)))
assign[x] -= jobs[i]
return ans
return dp(0, assign)
jobs = [2,1,3,8,5]
k = 2
print(solve(jobs, k))输入
[2,1,3,8,5], 2输出结果
10