为什么最大值对了,最小值全为零啊
查看原帖
为什么最大值对了,最小值全为零啊
983282
hjm777NOIP 加油!楼主2023/10/4 15:59

Code:

#include <bits/stdc++.h>
#define maxn 105
using namespace std;
int n, a[maxn], f[maxn][maxn], sum[maxn], maxx, minx, g[maxn][maxn];
int main() {
	cin >> n;
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	for(int i = 1; i <= 2 * n; i++)
		sum[i] = sum[i - 1] + a[i];
	for(int l = 1; l <= n; l++)
		for(int i = 1; i <= 2 * n - 1; i++) {
			int j = l + i - 1;
			for(int k = i; k < j; k++)
				f[i][j] = max(f[i][j], f[i][k] + f[k + 1][j] + sum[j] - sum[i - 1]);
		}
	for(int l = 1; l <= 2 * n; l++)
		for(int i = l + 1; i <= l + n; i++) {
			int j = l + i - 1;
			g[i][j] = 0x3f3f3f3f;
			for(int k = i; k < j; k++)
				g[i][j] = min(g[i][j], g[i][k] + g[k + 1][j] + sum[j] - sum[i - 1]);
		}
	for(int i = 1; i <= n; i++)
		minx = min(minx, g[i][i + n - 1]), 
		maxx = max(maxx, f[i][i + n - 1]);
	for(int i = 1; i <= n; i++)	
		printf("%d %d\n", f[i][n + i - 1], g[i][n + i - 1]);
	return 0;
}

2023/10/4 15:59
加载中...