var n:integer; a:array[1..100] of longint; s:array[1..100,1..100] of longint; t:array[0..100,0..100] of longint; i,j,k,temp,max,min:longint; begin assign(input,'shizi.in'); reset(input); readln(n); fillchar(t,sizeof(t),0); {计算和数组} for i:=1 to n do read(a[i]); for i:=1 to n do for j:=1 to n do for k:=i to i+j-1 do begin if k>n then temp:=k mod n else temp:=k; t[i,j]:=t[i,j]+a[temp]; end; {动态规划求最大得分} fillchar(s,sizeof(s),0); for j:=2 to n do for i:=1 to n do for k:=1 to j-1 do begin if i+k>n then temp:=(i+k) mod n else temp:=i+k; {处理环形问题} max:=s[i,k]+s[temp,j-k]+t[i,j]; if s[i,j]n then temp:=(i+k) mod n else temp:=i+k; {处理环形问题} s[i,j]:=s[i,k]+s[temp,j-k]+t[i,j]; if min>s[i,j] then min:=s[i,j]; end; s[i,j]:=min; end; min:=maxlongint; {在最后的阶段状态中找最小得分} for i:=1 to n do if min>s[i,n] then min:=s[i,n]; writeln(max); writeln(min); end. //delphi/7197