解题思路
使用二分答案。
如果同时启用 k 台服务器,那么第 i 个任务需要的时间为:
ceil(tasks[i]/k)
也就是:
题目内容
服务器集群中有 n 个待处理的计算任务,第 i 个任务需要的总计算量为 tasks[i] 。所有任务必须在 h 小时内完成。
你需要决定同时启用 k 台服务器。系统按小时运行,每台服务器每小时可处理 1 计算量,处理规则如下:
- 所有服务器同一小时内只能处理同一任务。
- 集中处理:每小时,你必须从剩余任务中挑选一个,并将所有 k 台服务器都投入到该任务上进行计算。
- 资源闲置:如果当前被选中的任务所需的计算量小于 k ,那么多余的服务器在该小时内将处于闲置状态,该任务仍视为在该小时内完成。
请计算并返回最少需要同时启用多少台服务器,才能确保在 h 小时内完成所有任务。如果无法完成,请返回 −1 。
约束条件
- 1 ≤ n ≤ 1000
- 1 ≤ tasks[i] ≤ 1000007
- 1 ≤ h ≤ 1000007
输入描述
第一行输入整数 n ;
第二行输入 n 个正整数表示 tasks ;
第三行输入整数 h 。
输出描述
至少多少服务器可满足要求,无解返回 −1 。
样例1
输入
5
30 11 23 4 20
5
输出
30
说明
因为 h = 5 小时,而最大的任务需求为 30 台时,必须至少有 30 台服务器才能在第 1 小时完成该任务,否则不可能在 5 小时内全部完成。
样例2
输入
4
3 6 7 11
8
输出
4
说明
启用 4 台服务器时,调度方案如下:
- 任务 1 ( 3 计算量):使用 4 台运行 1 小时(闲置 1 计算量)
- 任务 2 ( 6 计算量):使用 4 台运行 2 小时(闲置 2 计算量)
- 任务 3 ( 7 计算量):使用 4 台运行 2 小时(闲置 1 计算量)
- 任务 4 ( 11 计算量):使用 4 台运行 3 小时(闲置 1 计算量)
总耗时 = 1 + 2 + 2 + 3 = 8 小时,满足条件。