本题中,每个任务必须从两种配置中选择一种,因此最直接的搜索方式是对每个任务依次选择配置 1 或配置 2。
如果直接进行 DFS,一共有 2n 种选择方案,时间复杂度为 O(2n),当 n=100 时无法通过。
观察搜索过程可以发现,对于某个任务位置 i,如果当前已经使用的资源量相同,那么后续任务的最优选择也完全相同。因此可以使用记忆化搜索,将重复状态保存下来。
定义状态:
某训练集群需要依次完成 n 个模型任务。对于每个任务,系统预先提供了两组可选的运行配置,不同配置会占用不同数量的计算资源,同时对应不同的训练耗时。
对于第 i 个任务:
集群当前最多能够提供 C 单位计算资源,其中资源统一按照“CPU 核心数 + GPU 显存 GB”计量。
现在需要为每个训练任务确定一种运行配置。每个任务必须且只能从两种配置中选择一种,所有任务所选择配置的资源消耗总和不能超过 C。
在满足资源限制的所有配置组合中,找到能够使所有任务总训练耗时最小的方案。
除了最小总训练耗时外,还需要统计该方案实际使用的资源总量,以及最终未被使用的剩余资源。
第一行包含两个整数 n 和 C,分别表示训练任务数量和集群能够提供的总算力资源上限。
其中:
1≤n≤100,1≤C≤1000
接下来共 n 行,每行包含四个正整数 c1、t1、c2、t2。
对于第 i 个任务:
数据满足:
1≤c1、c2≤100,1≤t1、t2≤100
输出三个整数,整数之间使用一个空格分隔。
三个整数依次表示:
其中:
剩余资源 = 上限C - 实际消耗
输入:
2 15
5 6 8 3
7 5 9 2
输出:
8 14 1
共有两个训练任务。
任务1选择方案1,需要 5 单位资源,耗时为 6;任务2选择方案2,需要 9 单位资源,耗时为 2。
此时资源总消耗为:
5+9=14
没有超过资源上限 C=15。
两个任务的总训练耗时为:
6+2=8
该结果是所有满足资源限制的选择方案中能够取得的最小总耗时。
因此实际使用资源为 14,剩余资源为 1,最终输出:
8 14 1
输入:
3 20
5 4 8 2
6 3 7 2
4 5 5 3
输出:
7 20 0
三个任务均选择方案2时:
因此总资源消耗为:
8+7+5=20
恰好达到资源上限 C=20。
对应的总训练耗时为:
2+2+3=7
因此最小总训练耗时为 7,实际资源消耗为 20,没有剩余资源,输出:
7 20 0
例如,如果任务2改为选择方案1,则总资源消耗变为:
8+6+5=19≤20
对应总训练耗时为:
2+3+3=8
虽然该组合仍然满足资源限制,但总训练耗时大于 7,因此不是最优方案。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册