一句话总结:把「连续放掉不超过 lim」转成相邻两次接单的下标间隔不超过 lim+1,再对「刚好接 t 项」做最小和 DP,用滑动窗口维护上一层最小值。
算法标签:动态规划、滑动窗口、序列选取
算法难度:6/10
云计算里一条 CI/CD 流水线由若干作业排成队列,用数组 arr 表示,格子里的值是该作业耗时。
资源不够,不能把队列里每一项都跑完,约定如下:
参数约束:
int - 最小累加耗时;队列为空(arr.length==0)时输出 0;若无法刚好跑完 t 个作业,返回 −1
输入
9 8 7 6 11 12 10
2
1
输出
-1
说明 队列长 7,要刚好跑 2 项,lim=1。即使尽量分散放掉,连续放掉上限也撑不住剩下的 5 项,因此给出 −1。
输入
11 4 15 6 8
4
3
输出
29
说明 一种跑法:跑 11、4,放掉 15,再跑 6 与 8。
其余合法跑法都至少要带上 15,耗时更大,因此答案是 29。
输入
4 80 4 80 4 80 4
4
2
输出
16
说明 跑第 1、3、5、7 项,三处 80 各自单独放掉。
把任何一项 80 跑进来都会让耗时变大,故最小值是 16。
输入
0
4
输出
0
说明 队列里没有任何作业,按约定给出 0。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册