我找到了,i没有取到n后的点。。。
by Ty_fan @ 2018-01-17 18:48:57
```cpp
#include<iostream>
#include<cstring>
using namespace std;
#define maxn 201
int a[201];
int n;
int sum[201][201];
int dp[201][201];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
for(int i=1;i<=2*n;i++){
sum[i][i]=a[i];
}
for(int i=1;i<=2*n-1;i++){
for(int j=i+1;j<=2*n;j++){
sum[i][j]=sum[i][j-1]+a[j];
}
}
memset(dp,0x7f,sizeof(dp));
for(int i=1;i<=2*n;i++){
dp[i][i]=0;
}
for(int l=1;l<=n-1;l++){
for(int i=1;i<=2*n;i++){
int j=i+l;
if(j<=2*n){
for(int k=i;k<j;k++){
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j]);
}
}
}
}
int ans=0x7fffffff;
for(int i=1;i<=n;i++){
ans=min(ans,dp[i][i+n-1]);
}
cout<<ans<<endl;
memset(dp,0,sizeof(dp));
for(int l=1;l<=n-1;l++){
for(int i=1;i<=2*n;i++){
int j=i+l;
if(j<=2*n){
for(int k=i;k<j;k++){
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j]);
}
}
}
}
ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,dp[i][i+n-1]);
}
cout<<ans;
return 0;
}
```
by Ty_fan @ 2018-01-17 19:25:41
```cpp
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,a[210],f[222][222],f1[222][222],sum[404];int q=0,ww,e;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
for(int i=1;i<=2*n;i++){
sum[i]=sum[i-1]+a[i];
}
for(int l=2;l<=n;l++){//距离
for(int i=1;i<=2*n-l+1;i++){
int j=i+l-1;
f[i][j]=999999;
f1[i][j]=0;
for(int k=i;k<=j-1;k++){
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+sum[j]-sum[i-1]);
f1[i][j]=max(f1[i][j],f1[i][k]+f1[k+1][j]+sum[j]-sum[i-1]);
}
}
}
int maxl=0,minl=999999999;
for(int i=1;i<=n;i++)
{
maxl=max(maxl,f1[i][i+n-1]);
minl=min(minl,f[i][i+n-1]);
}
cout<<minl<<endl<<maxl;
return 0;
}
```
by wangjiachi @ 2018-01-17 19:26:00
同样的错误,感谢!!!
by 19reborn @ 2020-02-15 14:12:12