rt,代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int n,m,dp[205][205],a[205],maxn=0x3f3f3f3f,f[205][205];
int main(){
cin>>n;
memset(dp,0x3f,sizeof(dp));
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
dp[i][i]=dp[i+n][i+n]=a[i];
f[i][i]=f[i+n][i+n]=0;
}
for(int i=1;i<n;i++) //求最小值
for(int j=1;j<=n;j++)
for(int k=j+1;k<=i+j;k++){
if(f[j][k-1]+f[k][j+i]+dp[j][k-1]+dp[k][i+j]<f[j][i+j]) dp[j][i+j]=dp[j][k-1]+dp[k][i+j],f[j][i+j]=f[j][k-1]+f[k][j+i]+dp[j][i+j];
if(i+j<=n) f[j+n][i+j+n]=f[j][i+j];
}
for(int i=1;i<=n;i++) maxn=min(maxn,f[i][i+n-1]);
cout<<maxn<<'\n';
maxn=0;
memset(dp,0,sizeof(dp));
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++) dp[i][i]=dp[i+n][i+n]=a[i];
for(int i=1;i<n;i++) //求最大值
for(int j=1;j<=n;j++)
for(int k=j+1;k<=i+j;k++){
if(f[j][k-1]+f[k][j+i]+dp[j][k-1]+dp[k][i+j]>=f[j][i+j]) dp[j][i+j]=dp[j][k-1]+dp[k][i+j],f[j][i+j]=f[j][k-1]+f[k][j+i]+dp[j][i+j];
if(i+j<=n) f[j+n][i+j+n]=f[j][i+j];
}
for(int i=1;i<=n;i++) maxn=max(maxn,f[i][i+n-1]);
cout<<maxn;
return 0;
}