这是一道区间DP的题,但是时间有一点太晚了,就不写详细题解了
回头等我把区间DP学明白了再发一篇文章吧
AC代码:
#include <algorithm>
#include <iostream>
using namespace std;
const int N = 205, INF = 1e8;
int a[N], f[N][N], pre[N], g[N][N];
int main() {int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];pre[i] = pre[i - 1] + a[i];}for (int i = n + 1; i <= 2 * n; i++)pre[i] = pre[i - 1] + a[i - n];int q = n;n *= 2;for (int len = 2; len <= n; len++) {for (int i = 1; i + len - 1 <= n; i++) {int j = i + len - 1;g[i][j] = INF;for (int k = i; k < j; k++) {f[i][j] = max(f[i][j], f[i][k] + f[k + 1][j] + (pre[j] - pre[i - 1]));g[i][j] = min(g[i][j], g[i][k] + g[k + 1][j] + (pre[j] - pre[i - 1]));}}}int min_ans = INF, max_ans = 0;for (int i = 1; i <= q; i++) {min_ans = min(min_ans, g[i][i + q - 1]);max_ans = max(max_ans, f[i][i + q - 1]);}cout << min_ans << endl << max_ans;return 0;
}