为什么我的最大值是对的,但是最小值一直爆0 /疑惑/疑惑/疑惑```cpp #include #include using namespace std; const int maxn = 1010 ;
int n , a[maxn] , sum[maxn] , f1[maxn][maxn] , f2[maxn][maxn] ;
int main(){ ios::sync_with_stdio(0); cin.tie(0) ; cout.tie(0) ; cin>>n; memset(sum , 0 , sizeof(sum)) ; for(int i = 1 ; i <= n ; i++){ cin>>a[i] ; sum[i] = sum[i - 1] + a[i] ; }
for(int i = n + 1 ; i <= 2 * n ; i++){
a[i] = a[i - n] ;
sum[i] = sum[i - 1] + a[i];
}
for(int i = 1 ; i <= n + n ; i++)
f1[i][i] = f2[i][i] = 0 ;
for(int len = 2 ; len <= n ; len++)
for(int i = 1 ; i <= 2 * n - len + 1 ; i++){
int j = i + len - 1 ;
for(int k = i ; k < j ; k++){
f1[i][j] = max(f1[i][j] , f1[i][k] + f1[k + 1][j] + sum[j] - sum[i - 1]);
f2[i][j] = min(f2[i][j] , f2[i][k] + f2[k + 1][j] + sum[j] - sum[i - 1]) ;
}
}
int ans1 = -10000 , ans2 = 0x3fff ;
for(int i = 1 ; i <= n + 1 ; i++){
ans1 = max(ans1 , f1[1][i + n - 1]) ;
ans2 = min(ans2 , f2[1][i + n - 1]) ;
}
cout<<ans2<<endl;
cout<<ans1 ;
return 0 ;
}