#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=215;
int n;
LL dp1[N][N],dp2[N][N];
LL a[N],s[N];
LL ans1=0x3f3f3f3f,ans2;
int main()
{
scanf("%d",&n);
memset(dp1,0x3f,sizeof dp1);
memset(dp2,-0x3f,sizeof dp2);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
s[i]=s[i-1]+a[i];
dp1[i][i]=0;
dp2[i][i]=0;
}
for(int i=n+1;i<=2*n;i++)
{
a[i]=a[i-n];
s[i]=s[i-1]+a[i];
dp1[i][i]=0;
dp2[i][i]=0;
}
for(int len=2;len<=n;len++)
{
for(int l=1;l+len-1<=n*2;l++)
{
int r=l+len-1;
for(int k=l;k<=r;k++)
{
dp1[l][r]=min(dp1[l][r],dp1[l][k]+dp1[k+1][r]+s[r]-s[l-1]);
}
}
}
for(int len=2;len<=n;len++)
{
for(int l=1;l+len-1<=2*n;l++)
{
int r=l+len-1;
for(int k=l;k<=r;k++)
{
dp2[l][r]=max(dp2[l][r],dp2[l][k]+dp2[k+1][r]+s[r]-s[l-1]);
}
}
}
for(int i=1;i<=n*2;i++)
{
ans1=min(ans1,dp1[i][i+n-1]);
ans2=max(ans2,dp2[i][i+n-1]);
}
printf("%lld\n%lld",ans1,ans2);
}
为什么求最大值时,要把最大值dp数组初始化为负无穷,如果为零就会是正解的两倍,求大佬解惑