题目要求:选定一个基准任务 i,把左右相邻且显存占用「不低于」vram[i] 的任务尽量并进来,得到一个包含 i 的连续子数组,额度 =vram[i]× 子数组长度,求所有 i 中的最大额度。
关键观察:把「能合并多少」变成「边界在哪里」。 对固定的 i,往左能一直合并,直到遇到第一个严格小于 vram[i] 的任务为止;往右同理。设
有 n 个 AI 推理任务按序排队,第 i 个任务需占用 vram[i] GB 显存;调度器可选定一个任务 i 为基准,向左右连续合并相邻任务(即连续子数组),合并条件是被合并任务的显存占用不低于 vram[i]。
已知任务的并行执行额度值 = vram[i]× 任务个数(满足条件的连续子数组长度);对于给定的任务序列 vram,请计算该序列中可达到的并行额度最大值是多少。
输入只有一行,是一个 JSON 风格的整数数组,表示每个任务的显存占用,格式为:
[v0,v1,...,v(n-1)]
即整行用半角方括号包裹,元素之间用半角逗号 , 分隔;逗号后面可以没有空格(例如 [2,1,5,6,2,3]),也可以有一个空格(例如 [2, 1, 5, 6, 2, 3]),两种写法等价。
取值范围:
输出一行,一个整数,表示该任务序列可达到的最大并行额度。
输入
[2,1,5,6,2,3]
输出
10
说明
输入
[2,4]
输出
4
说明
以占 2GB 的任务为基准,向右可合并 4GB(≥2)共 2 个,额度 =2×2=4;以占 4GB 的任务为基准不能向左合并 2GB(<4),仅自身 1 个,额度 4;最大为 4。
输入
[2,1,2]
输出
3
说明
中间占 1GB 的任务左右都可合并(均 ≥1),共 3 个,额度 =1×3=3;两端占 2GB 的各自仅算自身 1 个,额度 2,故最大为 3。
Scan the QR code below with WeChat to sign in
设置一个用户名,下一步用微信扫码完成注册
请使用微信扫描下方二维码完成注册