跳到主要内容

P5471. 时窗巡回最短

场次:2026年9月18日-非AI方向 · 来源:CodeFun2000 P5471

题目描述​

身为快递员,你每天都得离开仓站,把货送到若干客户处。各位客户各自给出可收货时段,货必须落在该时段内交到(早到可以停着等,晚到不行)。货都送完后,还得回到仓站。交通导致任意两处之间的行驶耗时已经给出(正反向未必相同)。请排出一条访问顺序,在所有可收货时段都满足的条件下,让离开仓站直到再次回到仓站所花的时长(把等候也算进去)尽量短。若怎样走都做不到,输出 −1-1。

一共给出 mm 处站点,编号写成 00 到 m−1m-1,其中 00 处就是仓站。

站点 pp 各自对应可到达闭区间 [lop,hip][lo_p,hi_p],意思是抵达该站的时刻必须落在 loplo_p 与 hiphi_p 之间,两端都算合法。

仓站的可作业时段覆盖整天 [0,1440][0,1440](单位:分钟)。你在时刻 00 离开仓站;途中允许在任意站点停着等(这段等候要算进总时长)。每位客户处必须经过且只经过一次,末了再回到仓站。行驶耗时表 dur[p][q]dur[p][q] 给出从站点 pp 走到站点 qq 要花多少分钟(dur[p][p]=0dur[p][p]=0,正反向可以不同)。

请给出尽量短的总时长(也就是再次抵达仓站的那个时刻);若无可行走法,输出 −1-1。

输入格式​

首行给出一个整数 mm(2≤m≤152\le m\le15),即站点一共有多少处(仓站也算在内)。

随后连续 mm 行,每行两个整数 loplo_p 与 hiphi_p(0≤lop≤hip≤14400\le lo_p\le hi_p\le1440),对应第 pp 处站点的可到达闭区间。

再随后 mm 行,每行 mm 个整数,构成行驶耗时表 durdur;第 pp 行第 qq 列就是从 pp 走到 qq 的耗时(0≤dur[p][q]≤14400\le dur[p][q]\le1440)。

输出格式​

输出一个整数:尽量短的总时长(分钟)。若全部客户处无法按规则走完,输出 −1-1。

示例​

示例 1​

输入:

4
0 1440
6 18
20 45
14 28
0 4 18 8
6 0 9 20
10 12 0 7
9 16 11 0

输出:

36

说明:

四处站点:仓站 00 的可作业时段 [0,1440][0,1440],客户 11 为 [6,18][6,18],客户 22 为 [20,45][20,45],客户 33 为 [14,28][14,28]。

最优走法 0→1→2→3→00\to 1\to 2\to 3\to 0:

  • 去 11:耗时 44,抵达时刻 44,等到 66
  • 去 22:耗时 99,抵达时刻 1515,等到 2020
  • 去 33:耗时 77,抵达时刻 2727,落在 [14,28][14,28]
  • 回仓站:耗时 99,抵达时刻 3636

另一条可行走法 0→1→3→2→00\to 1\to 3\to 2\to 0 会在时刻 4747 才回到仓站,更长。故答案为 3636。

示例 2​

输入:

4
0 1440
5 12
5 12
5 12
0 4 4 4
4 0 10 10
4 10 0 10
4 10 10 0

输出:

-1

说明:

三位客户的可收货时段都是 [5,12][5,12]。从仓站到任一客户耗时 44,抵达后等到 55;客户之间互走耗时 1010,再抵达已是时刻 1515,超出闭区间上界。怎样排列都走不完,故输出 −1-1。

加载评论中...