#xLYHDPlydlt50x5A01. 运输小猫 Cats Transport

运输小猫 Cats Transport

好的,我们整理成一道清晰的题目。


题目描述

小 S 有一个农场,养了 MM 只猫,雇了 PP 位饲养员。

农场中有一条笔直的路,路边有 NN 座山,从 11NN 编号。
ii 座山与第 i1i-1 座山之间的距离为 DiD_ii2i \ge 2),已知 D2,D3,,DND_2, D_3, \dots, D_N

饲养员们都住在 11 号山。

猫会出去玩:第 ii 只猫去 HiH_i 号山玩,玩到时刻 TiT_i 停止,然后就在原地等待饲养员来接。

饲养员必须把所有猫都接回来。
每个饲养员从 11 号山出发,以速度 11 单位距离/单位时间,沿着路走到 NN 号山。
饲养员在每座山可以立刻接走该山上已经在等待的猫,且携带猫的数量不限。

如果一只猫在 HiH_i 号山,玩到时刻 TiT_i,而饲养员在时刻 SS11 号山出发,那么:

  • 饲养员到达 HiH_i 号山的时刻为 S+dist(1,Hi)S + \text{dist}(1, H_i),其中 dist(1,Hi)\text{dist}(1, H_i) 表示从 11 号山到 HiH_i 号山的距离。
  • 猫的等待时间为 S+dist(1,Hi)TiS + \text{dist}(1, H_i) - T_i(如果这个值 0\ge 0),否则不能接上(必须保证到达时间 Ti\ge T_i)。

注意:

  • 饲养员的出发时间可以是负数(例如提前出发)。
  • 每个饲养员可以接走沿途所有已经在等待的猫。
  • 目标是规划 PP 位饲养员的出发时间(饲养员之间出发时间可以不同),使得所有猫的等待时间总和最小。
  • 数据保证有解(P1P \ge 1,且饲养员数量足够接完所有猫)。

输入格式

第一行三个整数 N,M,PN, M, P
第二行包含 N1N-1 个整数 D2,D3,,DND_2, D_3, \dots, D_N(表示第 i1i-1ii 的距离)。
接下来 MM 行,每行两个整数 Hi,TiH_i, T_i

输出格式

输出一个整数,表示所有猫等待时间总和的最小值。

数据范围

  • 2N1052 \le N \le 10^5
  • 1M1051 \le M \le 10^5
  • 1P1001 \le P \le 100
  • 1Di<100001 \le D_i < 10000
  • 1HiN1 \le H_i \le N
  • 0Ti1090 \le T_i \le 10^9

输入样例

4 6 2
1 3 5
1 0
2 1
4 9
1 10
2 10
3 12

输出样例

3

样例解释

N=4N=4 座山,M=6M=6 只猫,P=2P=2 个饲养员。

距离(从 11 号山算起的累积距离):

  • D2=1D_2 = 1 → 山 11 到山 22 距离 = 11
  • D3=3D_3 = 3 → 山 22 到山 33 距离 = 33,山 11 到山 33 距离 = 1+3=41+3=4
  • D4=5D_4 = 5 → 山 33 到山 44 距离 = 55,山 11 到山 44 距离 = 1+3+5=91+3+5=9

所以 dist(1,H)\text{dist}(1, H)

  • H=1H=1 → 0
  • H=2H=2 → 1
  • H=3H=3 → 4
  • H=4H=4 → 9

猫的信息Hi,TiH_i, T_i):

  1. (1,0)(1, 0) — 到达时间必须 0\ge 0,实际出发时间 S0S \ge 0
  2. (2,1)(2, 1) — 到达时间 1\ge 1S+11S+1 \ge 1S0S \ge 0
  3. (4,9)(4, 9) — 到达时间 9\ge 9S+99S+9 \ge 9S0S \ge 0
  4. (1,10)(1, 10)S+010S+0 \ge 10S10S \ge 10
  5. (2,10)(2, 10)S+110S+1 \ge 10S9S \ge 9
  6. (3,12)(3, 12)S+412S+4 \ge 12S8S \ge 8

为了简化
定义猫的“实际必须接的时刻”为 ai=Tidist(1,Hi)a_i = T_i - \text{dist}(1, H_i),即饲养员的出发时间 SaiS \ge a_i 才能接到猫,猫等待时间 = SaiS - a_i

计算 aia_i

  1. 00=00 - 0 = 0
  2. 11=01 - 1 = 0
  3. 99=09 - 9 = 0
  4. 100=1010 - 0 = 10
  5. 101=910 - 1 = 9
  6. 124=812 - 4 = 8

所以 a=[0,0,0,10,9,8]a = [0, 0, 0, 10, 9, 8],按从小到大排序(题意其实应该先按 aia_i 排序): 排序后 a=[0,0,0,8,9,10]a = [0, 0, 0, 8, 9, 10]

现在问题变为:有 MM 个“任务” aia_i(单调不减),要分成 PP 组,每组由一个饲养员在时刻 SjS_j 出发,该组的猫等待时间之和 = igroupj(Sjai)\sum_{i \in \text{group}_j} (S_j - a_i),要求 SjaiS_j \ge a_i,目标是总等待时间最小。

最优时 SjS_j 取为该组中最大的 aia_i,这样等待时间最少。

于是问题变成:将 aa 序列分成 PP 段,每段代价 = 该段最大值 × 长度 - 该段 aia_i 之和。

对于排序后的 aa[0,0,0,8,9,10][0, 0, 0, 8, 9, 10],前缀和 sum=[0,0,0,8,17,27]sum = [0, 0, 0, 8, 17, 27](累加)。


P=2P=2

分法1

  • 第一段 [0,0,0][0,0,0]:最大值 0,长度 3,和 0,代价 = 0×30=00\times 3 - 0 = 0
  • 第二段 [8,9,10][8,9,10]:最大值 10,长度 3,和 27,代价 = 10×327=3027=310\times 3 - 27 = 30 - 27 = 3 总代价 = 0+3=30 + 3 = 3

分法2

  • 第一段 [0,0,0,8][0,0,0,8]:最大值 8,长度 4,和 8,代价 = 8×48=328=248\times 4 - 8 = 32 - 8 = 24
  • 第二段 [9,10][9,10]:最大值 10,长度 2,和 19,代价 = 10×219=2019=110\times 2 - 19 = 20 - 19 = 1 总代价 = 2525,更大。

显然最小是 33

所以样例输出为 33