#P2359. 商船运输
商船运输
题目描述
开辟新航路以后,欧洲的海上贸易日益繁荣,许多商人带领着他们的船队,在世界各地来往穿梭。这其中有位很有头脑的XX船长,他十分重视收集各港口的供需情报,并以此确定他的下一步计划,通过减少运输的时间来获取更多的利益。他的情报包括以下的内容:
1. 一幅完整的航海图。这其中包含了陆地、海洋以及各港口的位置。船只每次只能沿上下左右四个方向移动一格(不可移到陆地上和地图外,可移进港口),且每次移动都需航行一天。
2. 各港口可供应的货物。当然,每种货物不可能到处都买的到,否则就用不着船队了。因此,规定每种货物最多只有20个的港口供应。
3. 各港口需要的货物。与情报2不同的是,各港所需的货物是变化的,即XX船长是逐渐得到新情报的。同时,每当他得到一个新的货物需求(i,j)(表示港口j需要货物i),他必须马上作出决策:选择几号船完成此任务。因为要计算出怎样最优是比较困难的,所以船长采取了这样一个近似的方法:找出“完成新任务所需时间”最少的船,将其用来完成新任务,若有多艘这样的船,则从中选择编号最小的。(“完成新任务所需时间”包含两个过程:航行到一个供应货物i的港口并上货和将货物i运到港口j并卸货,其中上货和卸货的时间忽略不计。因为上货港口的选择不同,所需的时间也会不同,所以,必须对上货的港口进行选择,使该船的“完成新任务所需时间”尽量短)
XX船长想要知道的是:他的所有船只共需多少时间来完成这些任务,即所有船只完成各自任务的时间和。
输入格式
第一行是是六个数N、M、port_num、good_num、ship_num、start,表示航海图的长、宽,以及港口总数、货物种类和船长拥有的船只数、所有船的初始位置(停泊的港口编号)。
以下N+1行是一个N×M的矩阵,在矩阵中0、1、2分别对应海洋、港口和陆地。港口的编号对应由上至下,由左至右(由上至下优先)的读入顺序,第一个读入的港口编号为1,第二个读入的港口编号为2……
第N+2行到第N+port_num+1行按编号顺序给出了各港口供应的货物,其格式为:
N1 p11 p12 … p1N1
N2 p21 p22 … p2N2
… … … … …
Ni pi1 pi2 … piNi
… … … … …
Nport_num pport_num1 pport_num2 … pport_numNport_num
Ni是港口i供应的货物总数,pij是港口i供应的第j种货物编号。
第N+port_num+2行是一个数Total,表示情报3中获得的任务总数,以下Total行按情报获得的时间给出了Total个任务,每个任务占一行,包含两个数i、j,表示港口j需要货物i。
文件一行中相临两数用一个或多个空格隔开。
输出格式
仅有一个数T,是你的程序得出的所有船只完成各自任务的时间和。
5 5 3 4 2 1
0 1 0 0 0
2 2 2 0 0
0 1 2 0 2
0 2 2 0 1
0 0 0 0 0
1 3
3 1 2 4
1 4
4
1 3
2 3
3 2
4 1
54
数据范围与约定
数据范围
1≤N、M≤100,1≤port_num≤100,1≤good_num