为什么只开两倍空间会RE
查看原帖
为什么只开两倍空间会RE
526638
keqi0115I_LOVE_OI楼主2025/1/31 21:22

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;
}
2025/1/31 21:22
加载中...