#P1771. Elevator Stopping Plan
Elevator Stopping Plan
描述
ZSoft公司位于高科大厦内。大厦里的员工工作都非常努力,但大厦里的电梯总是让他们苦不堪言。为什么呢?因为高科大厦只有一部电梯,却有数百家公司入驻。每天早上,人们都要浪费大量时间等电梯。
聪明的ZSoft员工哈尔想改变这一现状,他想找到让电梯更高效运行的方法,但这并非易事。
高科大厦共有31层。电梯每上升一层需要4秒,即:若电梯从1层直达31层且中途不停,耗时为秒。电梯每次停靠需停留10秒(31层无需计算停靠时间)。例如,若电梯在每一层都停靠,总耗时为秒。另一方面,员工步行每层需要20秒,从1层步行到31层需秒,显然这不是好选择。因此,有些人会选择乘坐电梯到离办公室最近的楼层。
经过长时间思考,哈尔终于想到了改进方案。他告诉电梯管理员:首先,管理员统计所有人要到达的楼层,然后设计一个停靠方案,使得最后一个人到达目标楼层的时间最短。例如,若需要停靠的楼层为4、5、10层,最优方案是只停靠4层和10层。电梯到达4层耗时秒,停留10秒后,到达10层耗时秒。去4层的人12秒到达,去5层的人需秒(步行1层),去10层的人46秒到达。因此,最后一人到达的时间为46秒,这是较优的方案。
现在,你需要编写程序帮助电梯管理员设计停靠方案,使得最后一人到达目标楼层的时间最短。
输入
输入包含多个测试用例,每个用例占一行,格式为:
n f1 f2 ... fn
其中n表示需要停靠的楼层数,n=0时表示输入结束。f1 f2 ... fn为需要停靠的楼层(n≤30,2≤f1<f2<…<fn≤31),每个数字用空格分隔。
输出
对每个测试用例,第一行输出最后一人到达的最短时间,第二行输出停靠方案。请注意,第二行开头需包含停靠楼层的总数,随后是楼层列表。可能存在多个最优解,输出任意一个即可。不允许出现多余空格。
输入数据 1
3 4 5 10
1 2
0
输出数据 1
46
2 4 10
4
1 2
来源
Asia Guangzhou 2003