最小值可以,最大值不可以
#include "bits/stdc++.h "
using namespace std;
const int N = 2005;
int dp[N][N], wight[100], s[N], mi = 100000000;
int n;
int f[N][N], mx = 0;
int main() {
cin >> n;
memset(dp, 0x3f, sizeof(dp));
memset(f, -1, sizeof(f));
for (int i = 1; i <= n; i++) {
cin >> wight[i];
wight[i + n] = wight[i];
}
for (int i = 1; i <= 2 * n; i++) {
dp[i][i] = 0;
f[i][i] = 0;
s[i] = s[i - 1] + wight[i];
}
for (int len = 2; len <= n; len++) {
for (int l = 1; l <= 2 * n; l++) {
int r = l + len - 1;
if (r > 2 * n)
break;
for (int k = l; k < r; k++) {
dp[l][r] = min(dp[l][r], dp[l][k] + dp[k + 1][r] + s[r] - s[l - 1]);
f[l][r] = max(f[l][r], f[l][k] + f[k + 1][r] + s[r] - s[l - 1]);
}
}
}
for (int i = 1; i <= n; i++) {
mi = min(dp[i][i + n - 1], mi);
mx = min(f[i][i + n - 1], mx);
}
cout << mi << endl;
cout << mx ;
return 0;
}