两人过桥

来源:互联网 发布:淘宝装修 客户达 编辑:程序博客网 时间:2024/04/30 21:07

问题描述:
有n个人希望在晚上通过一座桥。在任何时刻,最多只能有两个人在桥上,并且必须要带着手电筒才能通过桥。现在的麻烦是只有一个手电筒,所以必须安排某种顺序,使得手电筒可以被带回去让更多的人过桥(手电筒必须由人带回,不可以从对岸扔过去)。 每个人都有不同的过桥时间,两个人一起过桥所用的时间等于其中较慢的一个。你的任务是要找出能在最短时间内使所有人都过桥的方案。 输入格式: 第一行是一个整数n。 接下来有n行,每一行给出一个人的过桥时间(整数,单位:秒)。 每个人的过桥时间不超过100秒。 输出格式:
输出一行一个数,表示所有人过桥的最短时间。
样例输入: 4 1 2 5 10
样例输出: 17

var
n,m,j,k,i,l:longint;
a,f:array[0..1001] of longint;

procedure sort;
var
t,i,j:longint;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
end;

function min(a,b:longint):longint;
begin
if a>b then exit(b)
else exit(a);
end;

begin
readln(n);
for i:=1 to n do
readln(a[i]);
sort;
f[1]:=a[1];
f[2]:=a[2];
for i:=3 to n do
f[i]:=min(f[i-1]+a[i]+a[1],f[i-2]+a[i]+a[1]+a[2]*2);
writeln(f[n]);
end.

原创粉丝点击