#include<bits/stdc++.h>
using namespace std;
const int N=410;
int f[N][N],g[N][N],a[N],s[N],n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
memcpy(a+n+1,a+1,4*n);
for(int i=1;i<=2*n;i++) s[i]=s[i-1]+a[i];
for(int i=2*n;i>=1;i--)
{
for(int j=i+1;j<=2*n;j++)
{
f[i][j]=0x3f3f3f3f,g[i][j]=-0x3f3f3f3f;
for(int k=i;k<j;k++)
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]),g[i][j]=max(g[i][j],g[i][k]+g[k+1][j]+s[j]-s[i-1]);
}
}
int MIN=0x3f3f3f3f,MAX=-0x3f3f3f3f;
for(int i=1;i<n;i++) MIN=min(MIN,f[i][i+n-1]),MAX=max(MAX,g[i][i+n-1]);
printf("%d\n%d\n",MIN,MAX);
return 0;
}
环形石子合并
最新推荐文章于 2024-07-04 17:35:22 发布