https://www.luogu.com.cn/record/200950925 60分#3#4RE
#include <iostream>
#include <cstring>
using namespace std;
int n;
int a[210];
int sum[210];
int minn[210][210], maxn[210][210];
int main(){
cin >> n;
memset(minn, 0x3f3f3f3f, sizeof(minn));
memset(maxn, 0, sizeof(maxn));
for(int i = 1; i <= n; i++){
cin >> a[i];
sum[i] = sum[i - 1] + a[i];
maxn[i][i] = minn[i][i] = 0;
}
for(int i = n + 1; i <= n * 2; i++){
a[i] = a[i - n];
sum[i] = sum[i - 1] + a[i];
maxn[i][i] = minn[i][i] = 0;
}
for(int i = 2; i <= n * 2; i++){
for(int j = 1; j <= n * 2; j++){
int x = j, y = i + j - 1;
for(int k = x; k < y; k++){
maxn[x][y] = max(maxn[x][y], maxn[x][k] + maxn[k + 1][y] + sum[y] - sum[x - 1]);
minn[x][y] = min(minn[x][y], minn[x][k] + minn[k + 1][y] + sum[y] - sum[x - 1]);
}
}
}
int ans1 = -1, ans2 = 1e9 + 7;
for(int i = 1; i <= n; i++){
ans1 = max(ans1, maxn[i][n + i - 1]);
ans2 = min(ans2, minn[i][n + i - 1]);
}
cout << ans2 << endl << ans1 << endl;
return 0;
}
https://www.luogu.com.cn/record/200951171 AC
#include <iostream>
#include <cstring>
using namespace std;
int n;
int a[1010];
int sum[1010];
int minn[1010][1010], maxn[1010][1010];
int main(){
cin >> n;
memset(minn, 0x3f3f3f3f, sizeof(minn));
memset(maxn, 0, sizeof(maxn));
for(int i = 1; i <= n; i++){
cin >> a[i];
sum[i] = sum[i - 1] + a[i];
maxn[i][i] = minn[i][i] = 0;
}
for(int i = n + 1; i <= n * 2; i++){
a[i] = a[i - n];
sum[i] = sum[i - 1] + a[i];
maxn[i][i] = minn[i][i] = 0;
}
for(int i = 2; i <= n * 2; i++){
for(int j = 1; j <= n * 2; j++){
int x = j, y = i + j - 1;
for(int k = x; k < y; k++){
maxn[x][y] = max(maxn[x][y], maxn[x][k] + maxn[k + 1][y] + sum[y] - sum[x - 1]);
minn[x][y] = min(minn[x][y], minn[x][k] + minn[k + 1][y] + sum[y] - sum[x - 1]);
}
}
}
int ans1 = -1, ans2 = 1e9 + 7;
for(int i = 1; i <= n; i++){
ans1 = max(ans1, maxn[i][n + i - 1]);
ans2 = min(ans2, minn[i][n + i - 1]);
}
cout << ans2 << endl << ans1 << endl;
return 0;
}