题目描述
你有 n 台机器,编号为 1~n,每台都需要完成一项工作,机器经过配置后都能独立完成一项工作。假设第 i 台机器你需要花 B 分钟进行设置,然后开始运行,J 分钟后完成任务。
现在,你需要选择布置工作的顺序,使得用最短的时间完成所有工作。 注意,不能同时对两台进行配置,但配置完成的机器们可以同时执行他们各自的工作.
输入描述
第一行输入代表总共有 M 组任务数据 (1<M<=10)。每组数第一行为一个整数指定机器的数量 N (0<N<=1000)。 随后的 N 行每行两个整数,第一个表示 B (0<=B<=10000),第二个表示 J (0<=J<=10000)
每组数据连续输入,不会用空行分隔。各组任务单独计时。
输出描述
对于每组任务,输出最短完成时间,且每组的结果独占一行。例如,两组任务就应该有两行输出
** 示例1
输入
1
1
2 2
输出
4
说明>输出共 3 行数据,第 1 行代表只有 1 组数据;第 2 行代表本组任务只有 1 台机器;第 3 行代表本机器:配置需要 2 分钟,执行需要 2 分钟。输出 1 行数据,代表执行结果为 4 分钟。
** 示例2
输入
2
2
1 1
2 2
3
1 1
2 2
3 3
输出
4
7
说明>第一行代表输入共 2 组数据, 2 - 4 行代表第一组数据,为 2 台机器的配置、执行信息(第 1 台机器:配置需要 1 分钟,执行需要 1 分钟;第 2 台机器:配置需要 2 分钟,执行需要 2 分钟)。
5 - 8 行代表第二组数据,为 3 台机器的配置、执行信息(意义同上)。输出共 2 行,分别代表第 1 组任务共需要 4 分钟和第 2 组任务需要 7 分钟(先配置 3,在配置 2,最后配置 1,执行 1 分钟,共 7 分钟)。
思路
核心思路总结
- 算法选型:贪心算法,核心是通过最优局部选择推导全局最优解;
- 排序规则:将机器按「执行时间J从大到小」排序(J相同无需额外处理,因B不影响核心逻辑),优先配置执行时间长的机器;
- 核心计算:
- 维护
sumB(累计配置时间):配置需串行执行,逐台累加每台机器的配置时间B; - 计算单台机器完成时间:
sumB + 该机器执行时间J(配置完成后机器并行执行,完成时间为配置累计时间+自身执行时间); - 总耗时为所有机器完成时间的最大值(并行执行下,最后完成的机器决定总耗时);
- 维护
- 流程:按组数遍历→读取每组机器数据→贪心排序→计算累计配置时间和最大完成时间→收集结果并输出。
时空复杂度
- 时间复杂度:O(M×N log N)
- M为任务组数(M≤10),N为每组机器数(N≤1000);
- 核心耗时为机器排序操作(O(N log N)),每组数据的遍历计算为O(N),整体复杂度由排序主导;
- 空间复杂度:O(N)
- 需存储每组机器的B/J信息(O(N)),结果数组存储每组答案(O(M),M≤10可忽略),整体空间由机器数据存储主导。
代码
function solution() {
const M = Number(readline());
const results

最低0.47元/天 解锁文章
27

被折叠的 条评论
为什么被折叠?



