program acm22948; const maxn=4000; var f:array[1..maxn,1..maxn] of longint; a,sum:array[0..maxn] of longint; d,i,j,k,n,min,max:longint; begin fillchar(sum,sizeof(sum),0); readln(n); for i:=1 to n do begin read(a[i]); a[n+i]:=a[i]; end; for i:=1 to 2*n do sum[i]:=sum[i-1]+a[i]; fillchar(f,sizeof(f),0); for d:=2 to n do for i:=1 to 2*n-d+1 do begin j:=i+d-1; if f[i,i]+f[i+1,j]<f[i,j-1]+f[j,j] then max:=f[i,j-1]+f[j,j] else max:=f[i,i]+f[i+1,j]; f[i,j]:=max+sum[j]-sum[i-1]; end; max:=0; for i:=1 to n do if max<f[i,i+n-1] then max:=f[i,i+n-1]; writeln(max); end. /************************************************************** Problem: 2117 User: admin Language: Pascal Result: Wrong Answer ****************************************************************/