#### 你写好看点不就对了吗
```
#include<bits/stdc++.h>
using namespace std;
const int N=203,INF=0x7f7f7f7f;
int n,a[N],dp1[N][N],dp2[N][N],sum[N],minn=INF,maxn=-INF;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
for(int j=i;j<=n<<1;++j){
dp1[i][j]=dp1[i+n][j]=INF;
dp2[i][j]=dp2[i+n][j]=-INF;
}
scanf("%d",&a[i]);
a[i+n]=a[i];
dp1[i][i]=dp1[i+n][i+n]=dp2[i][i]=dp2[i+n][i+n]=0;
}
for(int i=1;i<=n<<1;++i) sum[i]=sum[i-1]+a[i];
for(int i=1;i<n;++i){ //向后走i个
for(int j=1;j+i<=n*2+1;++j){
int r=j+i;
for(int k=j;k<r;++k){
dp1[j][r]=min(dp1[j][r],dp1[j][k]+dp1[k+1][r]+sum[r]-sum[j-1]);
dp2[j][r]=max(dp2[j][r],dp2[j][k]+dp2[k+1][r]+sum[r]-sum[j-1]);
}
}
}
for(int i=1;i<=n;++i) minn=min(minn,dp1[i][i+n-1]),maxn=max(maxn,dp2[i][i+n-1]);
printf("%d\n%d",minn,maxn);
return 0;
}
```
by wenyutao1 @ 2023-08-26 21:30:59
@[wenyutao1](/user/751546)
你上面一份代码是这么写的:
```cpp
for(int i=1;i<n;++i){
for(int j=1;j<=n;++j){ //枚举是起点
```
下面一份是这么写的:
```cpp
for(int i=1;i<n;++i){ //向后走i个
for(int j=1;j+i<=n*2+1;++j){
```
所以有差别,一个40一个100。
要问我怎么知道的?因为我也是按你上面那么写的hh,多亏你我才AC。
by retamian @ 2023-10-03 15:10:19
@[retamian](/user/1033360) OK,OK;
by wenyutao1 @ 2023-10-04 22:52:29