测试点二三四WA
最小值没问题,最大值有问题
#include<bits/stdc++.h>
using namespace std;
int readint() {
int s = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-')
w = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
s = (s << 1) + (s << 3) + (ch ^ '0');
ch = getchar();
}
return s * w;
}
int n, minn = INT_MAX, maxx = INT_MIN;
int sum[250];
int dp1[250][250];
int dp2[250][250];
int main() {
memset(dp1, 0x3f3f3f, sizeof dp1);
n = readint();
for(int i = 1; i <= n; i ++){
dp1[i][i] = dp1[i + n][i + n] = 0;
sum[i] = readint();
sum[i + n] = sum[i];
}
for(int i = 2; i <= 2 * n - 1; i ++)
sum[i] += sum[i - 1];
for(int i = 2; i <= n; i ++)
for(int l = 1; l <= n; l ++){
int r = l + i - 1;
for(int k = l; k < r; k++){
dp1[l][r] = min(dp1[l][r], dp1[l][k] + dp1[k + 1][r] + (sum[r] - sum[l - 1]));
dp2[l][r] = max(dp2[l][r], dp2[l][k] + dp2[k + 1][r] + (sum[r] - sum[l - 1]));
}
}
for(int l = 1; l <= n; l ++){
minn = min(minn, dp1[l][l + n - 1]);
maxx = max(maxx, dp2[l][l + n - 1]);
}
cout << minn << endl << maxx;
return 0;
}