经典区间DP
#include<iostream>
using namespace std;
#include<cmath>
#define INF 0x3f3f3f
int n,i,j,k,len,minn=INF,maxn=0,a[105],sum[205];
int fminn[205][205],fmaxn[205][205];
int main()
{
cin>>n;
for (i=1;i<=n;i++) cin>>a[i];
for (i=1;i<=n+n;i++) sum[i]=sum[i-1]+a[(i-1)%n+1];//处理环形,把一条链复制一遍接在后面
for (len=1;len<n;len++)
for (i=1,j=len+i;j<=n+n;i++,j++)
{
fminn[i][j]=INF;
for (k=i;k<j;k++)
{
fminn[i][j]=min(fminn[i][j],fminn[i][k]+fminn[k+1][j]+sum[j]-sum[i-1]);
fmaxn[i][j]=max(fmaxn[i][j],fmaxn[i][k]+fmaxn[k+1][j]+sum[j]-sum[i-1]);
}
}
for (i=1;i<n;i++) minn=min(minn,fminn[i][i+n-1]);
for (i=1;i<n;i++) maxn=max(maxn,fmaxn[i][i+n-1]);
cout<<minn<<endl<<maxn;
return 0;
}