#P2353. Ministry
Ministry
题目描述
Mr. F. 需要让一位部长签署一份文件。部长只有在文件被其部门批准后才会签署。该部门所在的办公楼有 层(),楼层编号从 到 。每层楼有 个房间(),房间编号从 到 。每个房间里有且仅有一位官员。
文件只有在被至少一位第 层的官员签署后才会被批准。一位官员签署文件的条件是至少满足以下条件之一:
- 该官员位于第 层;
- 文件已被位于正下方楼层(即当前楼层减 )且房间号相同的官员签署;
- 文件已被同一楼层的相邻房间(相邻房间指房间号相差 的房间)的官员签署。
每位官员签署文件时会收取一定的费用,费用为一个不超过 的正整数。
你需要找到批准文件的最便宜的方式,并输出签署路径的房间号(每行一个)。如果存在多条最便宜的路径,输出其中任意一条即可。
输入格式
第一行包含两个整数 和 ,用空格分隔。接下来的 行,每行包含 个用空格分隔的整数,表示每层楼各房间官员的签署费用(第 行的第 个整数表示第 层第 个房间官员的费用)。
输出格式
输出签署路径的房间号(每行一个),按访问顺序排列。
示例输入 1
3 4
10 10 1 10
2 2 2 10
1 10 10 10
示例输出 1
3
3
2
1
1
提示
你可以假设对于每位官员,总存在一种方式从第 层到该官员签署文件,且总费用不超过 。
由于输入数据较大,请使用 scanf()
而非 cin
读取数据以避免超时。
来源
Ural Collegiate Programming Contest 1999