跳到主要内容

P5428. 作业限放接单

场次:2026年9月11日-非AI方向 · 来源:CodeFun2000 P5428

题目描述​

云计算里一条 CI/CD 流水线由若干作业排成队列,用数组 arrarr 表示,格子里的值是该作业耗时。

资源不够,不能把队列里每一项都跑完,约定如下:

  1. 从队列最左侧开始依次审阅
  2. 对当前作业,可以选择跑掉或者放掉
  3. 选择跑掉时,把对应耗时累加进去
  4. 选择放掉时,不加耗时,并继续看后面的作业
  5. 硬性限制:连续被放掉的作业个数不能大于 limlim
  6. 目标:在上述限制下刚好跑完 tt 个作业,且累加耗时尽可能小

输入格式​

  • arrarr: 作业耗时数组,格子里的值是该项耗时
  • tt: int - 必须刚好跑完的作业个数
  • limlim: int - 连续放掉的最大个数

参数约束:

  • 0≤arr.length≤10000 \le arr.length \le 1000
  • 1≤arri≤100001 \le arr_i \le 10000
  • 0≤t≤arr.length0 \le t \le arr.length
  • 0≤lim≤10000 \le lim \le 1000

输出格式​

int - 最小累加耗时;队列为空(arr.length==0arr.length==0)时输出 00;若无法刚好跑完 tt 个作业,返回 −1-1

示例​

示例 1​

输入:

9 8 7 6 11 12 10
2
1

输出:

-1

说明: 队列长 77,要刚好跑 22 项,lim=1lim=1。即使尽量分散放掉,连续放掉上限也撑不住剩下的 55 项,因此给出 −1-1。

示例 2​

输入:

11 4 15 6 8
4
3

输出:

29

说明: 一种跑法:跑 1111、44,放掉 1515,再跑 66 与 88。

  • 刚好跑了 44 项(11,4,6,811,4,6,8)
  • 累加耗时 =11+4+6+8=29= 11+4+6+8=29
  • 各段连续放掉长度均不超过 33

其余合法跑法都至少要带上 1515,耗时更大,因此答案是 2929。

示例 3​

输入:

4 80 4 80 4 80 4
4
2

输出:

16

说明: 跑第 11、33、55、77 项,三处 8080 各自单独放掉。

  • 刚好跑了 44 项
  • 累加耗时 =4+4+4+4=16= 4+4+4+4=16
  • 连续放掉长度均为 11(≤2\le 2)

把任何一项 8080 跑进来都会让耗时变大,故最小值是 1616。

示例 4​

输入:


0
4

输出:

0

说明: 队列里没有任何作业,按约定给出 00。

加载评论中...