p1880
#include<bits/stdc++.h>
using namespace std;
int n;
int a[201]={0},dpmax[201][201],dpmin[201][201],h[201]={0};
int maxans=-999999999,minans=999999999;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
a[i+n]=a[i];
h[i]=h[i-1]+a[i];
for(int j=1;j<=n*2;j++){
dpmax[i][j]=-999999999;
dpmin[i][j]=999999999;
}
dpmax[i][i]=0;
dpmin[i][i]=0;
}
for(int i=n+1;i<=2*n;i++){
h[i]=h[i-1]+a[i];
for(int j=1;j<=n*2;j++){
dpmax[i][j]=-999999999;
dpmin[i][j]=999999999;
}
dpmax[i][i]=0;
dpmin[i][i]=0
}
for(int i=2;i<=n;i++){
for(int j=1;j+i-1<=n*2;j++){
for(int l=j;l<i+j-1;l++){
dpmax[j][j+i-1]=max(dpmax[j][j+i-1],dpmax[j][l]+dpmax[l+1][i+j-1]+h[j+i-1]-h[j-1]);
dpmin[j][j+i-1]=min(dpmin[j][j+i-1],dpmin[j][l]+dpmin[l+1][i+j-1]+h[j+i-1]-h[j-1]);
}
maxans=max(maxans,dpmax[j][j+n-1]);
minans=min(minans,dpmin[j][j+n-1]);
}
}
printf("%d\n%d",minans,maxans);
return 0;
}
数据样例过不了