求助
查看原帖
求助
992550
Braised_fish楼主2024/7/19 10:41

最小值可以,最大值不可以

#include "bits/stdc++.h "
using namespace std;
const int N = 2005;
int dp[N][N], wight[100], s[N], mi = 100000000;
int n;
int f[N][N], mx = 0;

int main() {
	cin >> n;
	memset(dp, 0x3f, sizeof(dp));
	memset(f, -1, sizeof(f));
	for (int i = 1; i <= n; i++) {
		cin >> wight[i];
		wight[i + n] = wight[i];
	}
	for (int i = 1; i <= 2 * n; i++) {
		dp[i][i] = 0;
		f[i][i] = 0;
		s[i] = s[i - 1] + wight[i];
	}
	for (int len = 2; len <= n; len++) {

		for (int l = 1; l <= 2 * n; l++) {
			int r = l + len - 1;
			if (r > 2 * n)
				break;
			for (int k = l; k < r; k++) {
				dp[l][r] = min(dp[l][r], dp[l][k] + dp[k + 1][r] + s[r] - s[l - 1]);
				f[l][r] = max(f[l][r], f[l][k] + f[k + 1][r] + s[r] - s[l - 1]);
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		mi = min(dp[i][i + n - 1], mi);
		mx = min(f[i][i + n - 1], mx);
	}
	cout << mi << endl;
	cout << mx ;
	return 0;
}
2024/7/19 10:41
加载中...