#include <vector>
#include <iostream>
using namespace std;
#define LF "\n"
void input() {}
void input(auto&& x, auto&&... rest) {
cin >> x;
input(rest...);
}
void print() {}
void print(auto&& x, auto&&... rest) {
cout << x;
print(rest...);
}
#define N 100 + 10
vector<int> x;
int min_score = 0x1FFFFFFF;
int max_score = -0x1FFFFFFF;
int main() {
int n;
input(n);
for (int i = 1; i <= n; i++) {
int x;
input(x);
::x.emplace(::x.end(), x);
}
for (int _____ = 1; _____ <= n; _____++) {
int kkk[N] = {};
for (int i = 1; i <= n; i++)
kkk[i] = kkk[i - 1] + x[i - 1];
int F[N][N] = {};
int G[N][N] = {};
for (int i = 1; i < n; i++)
for (int j = 1; j <= n - i; j++) {
F[j][i + j] = 0x1FFFFFFF;
G[j][i + j] = -0x1FFFFFFF;
for (int k = j; k <= i + j; k++) {
F[j][i + j] = min(F[j][i + j], F[j][k] + F[k + 1][i + j] + kkk[i + j] - kkk[j - 1]);
G[j][i + j] = max(G[j][i + j], G[j][k] + G[k + 1][i + j] + kkk[i + j] - kkk[j - 1]);
}
}
min_score = min(min_score, F[1][n]);
max_score = max(max_score, G[1][n]);
x.emplace(x.end(), x.front());
x.erase(x.begin());
}
print(min_score, LF, (max_score >> 1), LF);
return 0;
}
为什么最后输出的时候要输出 max_score >> 1 才能过?