小红需要把一个由 n 层组成的大模型按原有顺序部署到 k 台计算设备上。每台设备负责一个非空的连续层段,所有层必须恰好被划分为 k 段。 第 i 层的计算耗时为 c_i ,占用的显存为 w_i 。一台设备所负责层段的计算耗时和显存占用,分别等于该层段内对应数值之和。每台设备的显存容量均为 m ,因此任何一段的显存占用都不能超过 m 。 整条流水线的瓶颈耗时是所有设备计算耗时的最大值。请在满足显存限制的前提下,求瓶颈耗时的最小可能值。若无法划分,输出 -1 。
第一行输入三个正整数 n,k,m 。 第二行输入 n 个正整数 c_1,c_2,...,c_n 。 第三行输入 n 个正整数 w_1,w_2,...,w_n 。 保证 1 ≤ n ≤ 2 × 10^5 , 1 ≤ k ≤ 2 × 10^5 , 1 ≤ c_i,w_i ≤ 10^9 , 1 ≤ m ≤ 10^18 。
输出一个整数,表示最小可能的瓶颈耗时;若不存在合法划分,输出 -1 。
3 4 100 1 1 1 1 1 1
-1
4 2 10 2 2 2 2 6 6 6 6
-1
5 3 20 5 1 2 3 4 10 5 5 5 10
6
考点:二分
数据规模 n ≤ 200000 | 限制 2 秒 / 256MB | 标准输入输出
推荐方向:二分
本题切入点
「最小化瓶颈耗时」二分答案:二分瓶颈值 T,贪心地按顺序尽量多塞层到当前设备(受显存上限 m 约束),判断能否恰好分成 k 段;需先排除单层显存超 m 的无解情况。
把「求最优值」转化为「判定某值是否可行」,用单调性二分逼近答案。
思路框架(二分 通法 · 非本题专属)
实现要点:模板:while (lo < hi) { mid = (lo+hi)/2; if (check(mid)) hi = mid; else lo = mid+1; } 求最小可行值。
复杂度:时间 O(check 的代价 × log(答案范围)) | 空间 O(1)
该范式的通法易错点
对照本题
样例 1:输入 3 4 100 / 1 1 1 / 1 1 1 → 输出 -1
设备数量多于层数,无法保证每段非空。
样例 2:输入 4 2 10 / 2 2 2 2 / 6 6 6 6 → 输出 -1
任意两层的显存之和都超过上限,至少需要四段。
样例 3:输入 5 3 20 / 5 1 2 3 4 / 10 5 5 5 10 → 输出 6
可以依次划分为前两层、中间两层和最后一层,三段计算耗时分别为 6,5,4 。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-05月27号AI岗。