这是我的AC code:
#include <bits/stdc++.h>
using namespace std;
int n,m[205];
int f[204][204];
int sum[205],ans = 0x3f3f3f3f;
int main () {
cin >> n;
memset(f,0x3f,sizeof(f));
for (int i = 1; i<= n ;i++) {
cin >> m[i];
m[i+n] = m[i];
}
for (int i = 1; i <= 2 * n; i++) {
sum[i] = sum[i-1]+m[i];
f[i][i] = 0;
}
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= 2*n - i + 1; j++) {
int end = j + i -1;
for (int k = j; k <= end; k++) {
f[j][end] = min(f[j][end],f[j][k]+f[k+1][end]+sum[end]-sum[j-1]);
}
}
}
for (int i = 1; i <= n; i++) {
ans = min(ans,f[i][i+n-1]);
}
cout << ans << endl;
memset(f,0,sizeof(f));
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= 2*n - i + 1; j++) {
int end = j + i -1;
for (int k = j; k <= end; k++) {
f[j][end] = max(f[j][end],f[j][k]+f[k+1][end]+sum[end]-sum[j-1]);
}
}
}
ans = 0;
for (int i = 1; i <= n; i++) {
ans = max(ans,f[i][i+n-1]);
}
cout << ans / 2 << endl;
return 0;
}
为什么最后输出最大值的时候需要 ÷2 ,但最小值就不用呢?