最大值是对的,最小值有问题,为啥呀
#include<bits/stdc++.h>
using namespace std;
int n,ans=0x3f,ans1=-0x3f,a[105],s[105],dp[100][100],pd[100][100];
int main(){
cin>>n;
memset(dp,0x3f,sizeof(dp));
memset(pd,-1,sizeof(pd));
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
for(int i=1;i<=2*n;i++){
s[i]=s[i-1]+a[i];
dp[i][i]=0;
pd[i][i]=0;
}
for(int len=2;len<=n;len++){
for(int left=1;left+len-1<=2*n;left++){
int right=left+len-1;
for(int k=left;k<right;k++){
dp[left][right]=min(dp[left][right],dp[left][k]+dp[k+1][right]+s[right]-s[left-1]);
pd[left][right]=max(pd[left][right],pd[left][k]+pd[k+1][right]+s[right]-s[left-1]);
}
}
}
for(int i=1;i<=n;i++){
ans=min(ans,dp[i][i+n-1]);
ans1=max(ans1,pd[i][i+n-1]);
}
cout<<ans<<endl<<ans1;
return 0;
}