使用二分答案。
如果同时启用 k 台服务器,那么第 i 个任务需要的时间为:
ceil(tasks[i]/k)
也就是:
某个服务器集群接收了一批共 n 个计算任务,其中第 i 个任务需要 tasks[i] 单位的总计算量。系统必须在 h 小时内将这些任务全部处理完毕。你需要确定同时运行的服务器数量 k。
系统以整小时为单位进行调度。每台服务器每小时最多完成 1 单位计算量。调度必须满足以下规则:
请计算在 h 小时内完成全部任务所需的最少同时运行服务器数量。如果不存在可行的服务器数量,输出 -1。
约束条件:
1 和 1000 之间。1 和 1000007 之间。1 和 1000007 之间。第一行包含一个整数 n,表示任务数量。
第二行包含 n 个正整数,依次为 tasks[0],tasks[1],…,tasks[n−1],表示每个任务的总计算量。
第三行包含一个整数 h,表示完成所有任务的截止小时数。
输出一个整数,表示在 h 小时内完成全部任务所需的最少同时运行服务器数量。
如果没有任何可行方案,则输出 -1。
输入
3
3 5 7
5
输出
4
说明
当 k=3 时,任务 3、5、7 分别需要 ⌈3/3⌉=1、⌈5/3⌉=2、⌈7/3⌉=3 小时,总计 1+2+3=6,超过截止时间 5 小时。
当 k=4 时,三个任务分别需要 1、2、2 小时,总计 1+2+2=5,刚好满足截止时间。
因此最少需要 4 台服务器。
输入
4
10 10 10 10
3
输出
-1
说明
共有 4 个任务。无论同时运行多少台服务器,同一小时内所有服务器只能共同处理同一个任务,因此每个任务至少要占用 1 小时。
所以完成所有任务至少需要 4 小时,而截止时间只有 3 小时,无法完成,输出 -1。
输入
1
1000007
1
输出
1000007
说明
只有 1 个任务,计算量为 1000007。截止时间也是 1 小时,因此所有计算量必须在这 1 小时内完成。
每小时每台服务器最多处理 1 单位计算量,所以至少需要 1000007 台服务器。
最少服务器数量为 1000007。
输入
5
2 3 1 4 5
14
输出
2
说明
使用 1 台服务器时,总耗时为所有任务计算量之和,即 2+3+1+4+5=15,超过截止时间 14 小时。
使用 2 台服务器时,各任务耗时分别为 ⌈2/2⌉=1、⌈3/2⌉=2、⌈1/2⌉=1、⌈4/2⌉=2、⌈5/2⌉=3,总耗时为 1+2+1+2+3=9,不超过 14 小时。
因此最少需要 2 台服务器。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册