40分求调
查看原帖
40分求调
857215
JHR100330楼主2024/3/23 19:51

测试点二三四WA

最小值没问题,最大值有问题

#include<bits/stdc++.h>

using namespace std;

int readint() {
	int s = 0, w = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-')
			w = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		s = (s << 1) + (s << 3) + (ch ^ '0');
		ch = getchar();
	}
	return s * w;
}

int n, minn = INT_MAX, maxx = INT_MIN;
int sum[250];
int dp1[250][250];
int dp2[250][250];

int main() {
	memset(dp1, 0x3f3f3f, sizeof dp1);
	n = readint();
	for(int i = 1; i <= n; i ++){
		dp1[i][i] = dp1[i + n][i + n] = 0;
		sum[i] = readint();
		sum[i + n] = sum[i];
	}
	for(int i = 2; i <= 2 * n - 1; i ++)
		sum[i] += sum[i - 1];
	for(int i = 2; i <= n; i ++)
		for(int l = 1; l <= n; l ++){
			int r = l + i - 1;
			for(int k = l; k < r; k++){
				dp1[l][r] = min(dp1[l][r], dp1[l][k] + dp1[k + 1][r] + (sum[r] - sum[l - 1]));
				dp2[l][r] = max(dp2[l][r], dp2[l][k] + dp2[k + 1][r] + (sum[r] - sum[l - 1]));
			}
		}
	for(int l = 1; l <= n; l ++){
		minn = min(minn, dp1[l][l + n - 1]);
		maxx = max(maxx, dp2[l][l + n - 1]);
	}
	cout << minn << endl << maxx;
	return 0;
}
2024/3/23 19:51
加载中...