KSPREE - Triple Shoot
Tác giả: flashmt
Ngôn ngữ: Pascal
var a,d,l,r:array[1..20] of longint;
n,re,s,sum:longint;
procedure rf;
var i:longint;
begin
read(n);
for i:=1 to n do
begin
read(a[i]);
sum:=sum+a[i];
l[i]:=i-1; r[i]:=i+1;
end;
l[1]:=n; r[n]:=1;
end;
procedure att(x:longint);
var i,t,dem:longint; kt:boolean;
begin
if x=n then
begin
if s<re then re:=s;
exit;
end;
if s>=re then exit;
for i:=1 to n do
if (d[i]=0) and (d[l[i]]=0) then
begin
if d[r[i]]=0 then
begin
t:=a[i]+a[l[i]]+a[r[i]];
dem:=3;
kt:=true;
end
else
begin
t:=a[i]+a[l[i]];
dem:=2;
kt:=false;
end;
d[i]:=1; d[l[i]]:=1; d[r[i]]:=1;
sum:=sum-t;
s:=s+sum;
att(x+dem);
s:=s-sum;
sum:=sum+t;
d[i]:=0; d[l[i]]:=0;
if kt then d[r[i]]:=0;
end
else
begin
if (d[i]=0) and (d[l[i]]=1) and (d[r[i]]=1) then
begin
sum:=sum-a[i];
s:=s+sum;
d[i]:=1;
att(x+1);
d[i]:=0;
s:=s-sum;
sum:=sum+a[i];
end;
end;
end;
procedure pr;
begin
re:=maxlongint; s:=0;
att(0);
writeln(re);
end;
begin
rf;
pr;
end.