1723. 完成所有工作的最短时间
题目
给你一个整数数组 jobs
,其中 jobs[i]
是完成第 i
项工作要花费的时间。
请你将这些工作分配给 k
位工人。所有工作都应该分配给工人,且每项工作只能分配给一位工人。工人的 工作时间 是完成分配给他们的所有工作花费时间的总和。请你设计一套最佳的工作分配方案,使工人的 最大工作时间 得以 最小化 。
返回分配方案中尽可能 最小 的 最大工作时间 。
示例 1:
输入:jobs = [3,2,3], k = 3
输出:3
解释:给每位工人分配一项工作,最大工作时间是 3 。
示例 2:
输入:jobs = [1,2,4,7,8], k = 2
输出:11
解释:按下述方式分配工作:
1 号工人:1、2、8(工作时间 = 1 + 2 + 8 = 11)
2 号工人:4、7(工作时间 = 4 + 7 = 11)
最大工作时间是 11 。
提示:
1 <= k <= jobs.length <= 12
1 <= jobs[i] <= 107
思路
一开始其实是想的分支限界法,但实在代码能力不强,而且一个人可能有多个工作,也可能没有,所以真的搞出来还是很难,更别说我还不会写分支限界的代码= =。也不知道有没有大佬有分支限界的思路解决这个问题。
总之姑且是搞出了基本的DFS回溯,果然超时了= =:
class Solution {
int[] num;// 工人工作的数组
int res = Integer.MAX_VALUE;
public int minimumTimeRequired(int[] jobs, int k) {
num = new int[k];
dfs(jobs, 0, k);