求助,为什么求最小值永远都是错的,已经断环为链了呀。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXLEN = 1e4 + 5;
const int INF = 0x3f3f3f3f;
int N;
int dp[MAXLEN][MAXLEN];
int sum[MAXLEN];
int best[MAXLEN][MAXLEN];
int getMinValue() {
for (int i = 1; i <= (N << 1); i++){
best[i][i] = i;
}
for (int i = (N << 1) - 1; i > 0 ; i--) {
for (int j = i + 1; j <= (N << 1) ; j++) {
dp[i][j] = INF;
for(int k = best[i][j - 1]; k <= best[i + 1][j]; k++) {
int
if(dp[i][k] + dp[k + 1][j] + sum[j] - sum[i - 1] < INFtmp) {
dp[i][j] = dp[i][k] + dp[k + 1][j] + sum[j] - sum[i - 1];
best[i][j] = k;
}
}
}
}
int minn = INF;
for (int i = 1; i <= N; i++) {
minn = min(minn, dp[i][i + N -1]);
}
return minn;
}
int getMaxValue() {
for (int i = 1; i <= (N << 1); i++){
best[i][i] = i;
}
for (int i = (N << 1) - 1; i > 0 ; i--) {
for (int j = i + 1; j <= (N << 1) ; j++) {
dp[i][j] = INF;
dp[i][j] = max(dp[i][j - 1], dp[i + 1][j]) + sum[j] - sum[i - 1];
}
}
int maxx = 0;
for (int i = 1; i <= N; i++) {
maxx = max(maxx, dp[i][i + N -1]);
}
return maxx;
}
signed main() {
int tmp;
cin >> N;
sum[0] = 0;
for (int i = 1; i <= N; i++) {
cin >> tmp;
sum[i] = sum[i - 1] + tmp;
}
for(int i = 1 + N; i <= 2 * N; i++) {
sum[i] = sum[i - 1] + tmp;
}
cout << getMinValue() << endl;
cout << getMaxValue() << endl;
return 0;
}