Description:
Accept:
#include<bits/stdc++.h>
using namespace std;
#define maxn 20002
#define INF 1000000001
int a[500], f[1000][1000], fk[1000][1000], sum[1000];
int fs(int l, int r){
if(l==r){
return 0;
}
if(f[l][r]){
return f[l][r];
}
int res=0;
for(int k=l;k+1<=r;k++){
res=max(res, fs(l, k)+ fs(k+1, r));
}
res+=sum[r]-sum[l-1];
return f[l][r] = res;
}
int fs2(int l, int r){
if(l==r){
return 0;
}
if(f[l][r]){
return f[l][r];
}
int res=INF;
for(int k=l;k+1<=r;k++){
res=min(res, fs2(l, k) + fs2(k+1, r));
}
res+=sum[r]-sum[l-1];
return f[l][r]=res;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
for(int i=1;i<=2*n;i++){
sum[i]=sum[i-1]+a[i];
}
int maxl=0;
for(int i=1;i<=n;i++){
maxl=max(maxl, fs(i, i+n-1));
}
int minl=INF;
memset(f, 0, sizeof(f));
for(int i=1;i<=n;i++){
minl=min(minl, fs2(i, i+n-1));
}
cout<<minl<<endl;
cout<<maxl<<endl;
return 0;
}