会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
核心思路
样本顺序不能打乱,合法切分就是把 1..n 分成若干段连续区间。设 dpi 为前 i 个样本的最小总耗时。枚举最后一段 [l+1,i]:长度不超过 K,显存之和不超过 M 时,用
T=(i−l)×max(tl+1,…,ti)+∣gl+1+⋯+gi∣
转移到 dpi。某个 mi>M 时该样本进不了任何合法段,dpn 无解,输出 −1。
题目内容
某训练步按顺序处理 n 个样本,要把它们切成若干个微批次,使总耗时最小。第 i 个样本有显存占用 mi、计算耗时 ti 和有符号损失 gi。
每个微批次是一段下标连续的样本 [L,R](1≤L≤R≤n)。切分覆盖每个样本恰好一次,各段从左到右相接,第一段从 1 开始,最后一段到 n 结束。
处理规则
一、合法区间
区间 [L,R] 同时满足下面两条才合法:
- R−L+1≤K
- mL+mL+1+⋯+mR≤M
存在某个 mi>M 时,没有合法切分。否则每个单样本区间都合法。
二、耗时
合法区间 [L,R] 的耗时为
T(L,R)=(R−L+1)×max(tL,tL+1,…,tR)+∣gL+gL+1+⋯+gR∣
一种切分的总耗时等于其中每个微批次的 T 之和。结果是合法切分里的最小总耗时。没有合法切分时,结果为 −1。
输入描述
第一行三个整数 n、K、M,相邻整数之间用空格分隔。
第二行 n 个整数 m1,m2,…,mn,相邻整数之间用空格分隔。
第三行 n 个整数 t1,t2,…,tn,相邻整数之间用空格分隔。
第四行 n 个整数 g1,g2,…,gn,相邻整数之间用空格分隔。
约束
- 1≤n≤2000
- 1≤K≤n
- 1≤M≤109
- 1≤mi≤109
- 1≤ti≤106
- −106≤gi≤106
最小总耗时在 64 位有符号整数范围内。
输出描述
输出一行一个整数,表示最小总耗时。没有合法切分时,输出 −1。
样例1
输入
3 3 9
2 2 2
1 1 1
4 -6 4
输出
5
说明
整段 [1,3]:样本数是 3,显存之和是 6,两条都满足。max(t1,t2,t3)=1,损失之和是 4+(−6)+4=2,T(1,3)=3×1+∣2∣=5。
三个单样本:T(1,1)=5,T(2,2)=7,T(3,3)=5,总和是 17。
[1,2] 与 [3,3]:T(1,2)=2×1+∣4+(−6)∣=4,再加上 5,总和是 9。[1,1] 与 [2,3] 的总和也是 9。最小总耗时是 5。
样例2
输入
4 2 5
3 1 1 3
2 2 9 2
0 7 -7 0
输出
22
说明
K=2,长度大于 2 的区间都不合法。[1,4] 的显存之和是 8,大于 M。长度不超过 2 的区间显存之和都不超过 4,全部合法。
五种合法切分的总耗时:
- 四段单样本:T(1,1)=2,T(2,2)=9,T(3,3)=16,T(4,4)=2,总和 29。
- [1,2]、[3,3]、[4,4]:T(1,2)=2×2+∣7∣=11,总和 11+16+2=29。
- [1,2]、[3,4]:T(3,4)=2×9+∣−7∣=25,总和 11+25=36。
- [1,1]、[2,3]、[4,4]:T(2,3)=2×9+∣7+(−7)∣=18,总和 2+18+2=22。
- [1,1]、[2,2]、[3,4]:总和 2+9+25=36。
最小总耗时是 22。