#P1744. Elevator Stopping Plan
Elevator Stopping Plan
描述
ZSoft公司位于高科大厦(GaoKe Hall)内,是一家软件公司。大厦里的员工工作非常努力,但电梯总是让他们抓狂。为什么呢?因为高科大厦只有一部电梯,却有数百家公司。每天早上,人们不得不浪费大量时间等电梯。Hal是ZSoft公司的一位聪明人,他想改变这种状况。他希望找到一种方法,让电梯运行得更高效。但这并非易事。
高科大厦共有H层。电梯上升一层需要4秒。也就是说:如果电梯从1层直达第n层,中途不停,将花费(n-1)*4秒。而电梯每停一次需要额外花费10秒。因此,如果电梯每层都停,将花费(n-1)*4 + (n-2)*10秒(第n层不需要计算停靠时间)。另一方面,员工步行上楼或下楼一层需要20秒。如果他们从1层步行到第n层,将花费(n-1)*20秒。显然,这不是一个好主意。因此,有些人选择乘坐电梯到离办公室最近的楼层。
经过长时间的思考,Hal终于找到了改进的方法。他告诉电梯操作员他的想法:首先,电梯操作员询问每个人要去的楼层,然后设计一个停靠方案,使得最后一个人到达办公室所在楼层的时间最小化。例如,如果电梯需要在4层、5层和10层停靠,那么最优停靠方案是:电梯在4层和10层停靠。因为电梯将在34=12秒到达4层,然后停靠10秒,接着在64=24秒后到达10层(总时间为12 + 10 + 24 = 46秒)。要去4层的人将在12秒到达,去5层的人将在12 + 20 = 32秒到达(从4层步行到5层),而去10层的人将在46秒到达。因此,最后一个人到达的时间是46秒。这对所有人来说都是一个不错的方案。
现在,你需要编写一个程序,帮助电梯操作员设计停靠方案,使得最后一个人到达其楼层的时间最小化。
输入
输入包含多个测试用例。每个测试用例单独一行,格式如下:
n f1 f2 ... fn
表示电梯需要停靠的楼层总数为n,n=0表示测试用例结束。f1 f2 ... fn是电梯需要停靠的楼层(1<=n<=30000, 2<=f1 < f2 ... < fn<=30000)。每个数字之间用空格分隔。
输出
对于每个测试用例,输出最后一个人到达其楼层所需的时间,单独占一行。
输入数据 1
3 4 5 10
1 2
0
输出数据 1
46
4
来源
LouTiancheng@POJ