作业限放接单
动态规划约 584 字大约 2 分钟
P5428. 作业限放接单
场次:2026年9月11日-非AI方向 · 来源:CodeFun2000 P5428
题目描述
云计算里一条 CI/CD 流水线由若干作业排成队列,用数组 表示,格子里的值是该作业耗时。
资源不够,不能把队列里每一项都跑完,约定如下:
- 从队列最左侧开始依次审阅
- 对当前作业,可以选择跑掉或者放掉
- 选择跑掉时,把对应耗时累加进去
- 选择放掉时,不加耗时,并继续看后面的作业
- 硬性限制:连续被放掉的作业个数不能大于
- 目标:在上述限制下刚好跑完 个作业,且累加耗时尽可能小
输入格式
- : 作业耗时数组,格子里的值是该项耗时
- : int - 必须刚好跑完的作业个数
- : int - 连续放掉的最大个数
参数约束:
输出格式
int - 最小累加耗时;队列为空()时输出 ;若无法刚好跑完 个作业,返回
示例
示例 1
输入:
9 8 7 6 11 12 10
2
1输出:
-1说明:
队列长 ,要刚好跑 项,。即使尽量分散放掉,连续放掉上限也撑不住剩下的 项,因此给出 。
示例 2
输入:
11 4 15 6 8
4
3输出:
29说明:
一种跑法:跑 、,放掉 ,再跑 与 。
- 刚好跑了 项()
- 累加耗时
- 各段连续放掉长度均不超过
其余合法跑法都至少要带上 ,耗时更大,因此答案是 。
示例 3
输入:
4 80 4 80 4 80 4
4
2输出:
16说明:
跑第 、、、 项,三处 各自单独放掉。
- 刚好跑了 项
- 累加耗时
- 连续放掉长度均为 ()
把任何一项 跑进来都会让耗时变大,故最小值是 。
示例 4
输入:
0
4输出:
0说明:
队列里没有任何作业,按约定给出 。