小红需要在若干计算卡上调度一组不可抢占任务。每个任务给定必须同时占用的计算卡集合、持续时间,以及至多一个前驱任务。 同一张卡在同一时刻只能被一个任务占用;有前驱的任务只能在前驱完成后开始。多个互不冲突的任务可以同时运行。求完成全部任务的最短时间。
第一行输入计算卡数量 p 和任务数量 n 。 随后每个任务按编号 0 到 n-1 输入三行:第一行是该任务需要占用的卡编号列表;第二行是正整数持续时间;第三行是前驱任务编号,无前驱时为 -1 。 保证 1 ≤ p ≤ 10 , 1 ≤ n ≤ 8 , 1 ≤ duration ≤ 10^9 ;每个卡列表非空且不重复;依赖图无环。
输出完成全部任务的最短时间。
2 3 0 3 -1 0 2 -1 1 4 1
6
3 2 0 1 4 -1 1 2 5 0
9
考点:dfs
数据规模 n ≤ 8 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:dfs
本题切入点
任务数 n≤8 极小,直接 DFS 枚举任务执行顺序并模拟卡占用(记录每张卡的空闲时刻),满足前驱约束才可开始,取所有可行顺序中的最短完成时间。
一条路走到底再回溯,适合枚举全部方案与连通性判定。
思路框架(dfs 通法 · 非本题专属)
实现要点:回溯时务必把状态恢复干净;必要时加剪枝(可行性剪枝、最优性剪枝)。
复杂度:时间 O(状态数) | 空间 O(递归深度)
该范式的通法易错点
对照本题
样例 1:输入 2 3 / 0 / 3 / -1 / 0 / 2 / -1 / 1 / 4 / 1 → 输出 6
先在卡 0 执行任务 1,随后任务 0 与依赖任务 1 的任务 2 可以并行。
样例 2:输入 3 2 / 0 1 / 4 / -1 / 1 2 / 5 / 0 → 输出 9
任务 1 必须等待任务 0 完成。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-06月03号开发岗。