根据类别约束条件,类别较小的任务必须分配较小的处理编号,因此三个类别的任务将按类别顺序依次占据连续的编号区间:
在同类别的任务之间,编号的分配没有顺序限制,因此问题转化为:对每个类别,将给定的一组初始优先级 p 与一段连续的编号 s 进行匹配,使得该组内 ∑∣pi−si∣ 最小。这是一个经典的贪心问题:将两个数组分别排序后,按照大小顺序一一对应,即可使对应元素的绝对差之和最小。
有一个任务调度系统,里面有 N 个待处理的任务。每个任务 i 有两个属性:一个初始优先级数值 pi,以及一个类别标签 ti∈{0,1,2}。系统需要为这 N 个任务分配 1 到 N 的一个排列 s1,…,sN 作为最终的处理顺序,其中 si 表示任务 i 的处理编号。
编号分配必须满足类别约束:如果两个任务 i 和 j 的类别满足 ti>tj,则要求 si>sj。换句话说,类别较小的任务最终的处理编号也必须较小,同类别内部没有严格顺序要求。
我们希望在满足约束的前提下,使得分配的处理编号与初始优先级之差的绝对值之和尽可能小,即最小化 i=1∑N∣pi−si∣ 的值。请你计算这个最小值。
约束条件:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册