题面允许「主动清空缓存」,但清空只会把某个请求已经花掉的 tokens 步计算作废:它的显存虽然立刻释放,可重新开始时既要重新占用显存,又要从被清空时的进度起重新累计计算时间。也就是说,清空没有带来任何收益,只会让已经付出的步数白费。因此最优做法是从不主动清空。
这样一来,系统就没有任何可选择的余地了:每个时间步的接纳顺序被「mem 小者优先,mem 相同则到达更早者优先」完全固定,接纳一个请求时只要显存还装得下就必须接纳。整个过程是一个确定的模拟,答案唯一,不需要用贪心证明或 DP 求解——照着规则一步一步推即可。
在大语言模型(LLM)的自回归推理中,为了避免重复计算历史 Token 的注意力键值,系统会为每个请求维护一份 KV 缓存(Key-Value Cache)。缓存要占用显存,而显存总量是固定的;同一时刻能并行推进的请求越多,整体吞吐就越高。本题要求你在容量允许的范围内,按系统给定的规则把请求排进每个时间步,并算出全部请求处理完毕所用的总时间步数。
时间窗口内共有 N 个请求,第 i 个请求用三个整数描述:
系统可用的显存总容量为 M 个单位。
按上述规则运行系统,输出全部请求处理完毕时最后一个请求完成的时刻,也就是所需的总时间步数。
第一行包含两个整数 N 与 M,依次表示请求数量与显存容量。
接下来 N 行,每行包含三个整数 arrivei、tokensi、memi,依次描述一个请求。请求按从上到下的顺序先后到达,同一时刻只会有一个请求到达。
输出一个整数,表示全部请求处理完毕所需的总时间步数。
时间限制:C/C++ 1000ms,其他语言:2000ms 内存限制:C/C++ 512MB,其他语言:1024MB
输入
3 6
0 5 4
1 4 4
2 3 2
输出
9
说明
请求 1 在时刻 0 到达,占用 4 个单位的显存开始处理。时刻 1 请求 2 到达,此时 4+4=8 已超过容量 6,只能等待;时刻 2 请求 3 到达,它的 mem 为 2,比请求 2 更小,于是优先获得 4+2=6 的显存,与请求 1 并行处理。请求 1 用 5 个时间步(时刻 0 到 4)在时刻 5 完成,请求 3 用 3 个时间步(时刻 2 到 4)也在时刻 5 完成,显存全部释放。请求 2 从时刻 5 起处理 4 个时间步,于时刻 9 完成。总时间步数为 9。
输入
3 9
0 4 3
1 3 3
2 5 3
输出
7
说明
三个请求的 mem 都为 3,总和 3+3+3=9 不超过容量 9,因此可以同时处理。请求 1 在时刻 0 到达,用 4 个时间步于时刻 4 完成;请求 2 在时刻 1 到达,用 3 个时间步于时刻 4 完成;请求 3 在时刻 2 到达,用 5 个时间步于时刻 7 完成。最后一个请求在时刻 7 完成,总时间步数为 7。
Scan the QR code below with WeChat to sign in
设置一个用户名,下一步用微信扫码完成注册
请使用微信扫描下方二维码完成注册