n,i,j,k:longint;
a:array[1..100]of longint;
sum:array[0..100]of longint;
f,g:array[0..100,1..100]of int64;
function min(a,b:int64):int64;
begin
if a<b
then exit(a)
else exit(b);
end;
function max(a,b:int64):int64;
begin
if a<b
then exit(b)
else exit(a);
end;
begin
fillchar(f,sizeof(f),0);
filldword(g,sizeof(g)div 4,maxlongint);
readln(n);
sum[0]:=0;
for i:=1 to n do
begin read(a[i]);
sum[i]:=sum[i-1]+a[i];
end;
for i:=1 to n-1 do
begin
f[1,i]:=a[i]+a[i+1];
g[1,i]:=a[i]+a[i+1];
end;
for i:=1 to n do
begin
f[0,i]:=0;
g[0,i]:=0;
end;
for i:=2 to n-1 do
for j:=1 to n-i do
for k:=0 to i-1 do
begin
f[i,j]:=max(f[k,j]+f[i-k-1,j+k+1]+sum[j+i]-sum[j-1],f[i,j]);
g[i,j]:=min(g[k,j]+g[i-k-1,j+k+1]+sum[j+i]-sum[j-1],g[i,j]);
end;
writeln(g[n-1,1]);
writeln(f[n-1,1]);
end.
从50到100
var
n,i,j,k:longint;
max1,min1:int64;
a:array[1..200]of longint;
sum:array[0..200]of longint;
f,g:array[0..200,1..200]of int64;
function min(a,b:int64):int64;
begin
if a<b
then exit(a)
else exit(b);
end;
function max(a,b:int64):int64;
begin
if a<b
then exit(b)
else exit(a);
end;
begin
fillchar(f,sizeof(f),0);
filldword(g,sizeof(g)div 4,maxlongint);
readln(n);
sum[0]:=0;
for i:=1 to n do
begin read(a[i]);
a[i+n]:=a[i];
sum[i]:=sum[i-1]+a[i];
end;
for i:=n+1 to 2*n do
sum[i]:=sum[i-1]+a[i];
for i:=1 to 2*n-1 do
begin
f[1,i]:=a[i]+a[i+1];
g[1,i]:=a[i]+a[i+1];
end;
for i:=1 to 2*n do
begin
f[0,i]:=0;
g[0,i]:=0;
end;
for i:=2 to n-1 do
for j:=1 to 2*n-i do
for k:=0 to i-1 do
begin
f[i,j]:=max(f[k,j]+f[i-k-1,j+k+1]+sum[j+i]-sum[j-1],f[i,j]);
g[i,j]:=min(g[k,j]+g[i-k-1,j+k+1]+sum[j+i]-sum[j-1],g[i,j]);
end;
max1:=0;min1:=maxlongint;
for i:=1 to n do
begin
if f[n-1,i]>max1
then max1:=f[n-1,i];
if g[n-1,i]<min1
then min1:=g[n-1,i];
end;
writeln(min1);
writeln(max1);
end.