40分最大值有误求助
查看原帖
40分最大值有误求助
578966
zpqzpq楼主2022/10/28 10:32
#include <cstdio>
#include <algorithm>

using namespace std;

const int N = 2e2 + 5;
const int INF = 1e9 + 7;

int n;
int ans = INF;
int res;
int s[N];
int f[N][N];
int g[N][N];

int main ()
{
	scanf ("%d", &n);
	for (int i = 1; i <= n; i ++)
		scanf ("%d", &s[i]), s[i] += s[i - 1];
	for (int i = n + 1; i <= n * 2; i ++)
		s[i] = s[n] + s[i - n];
	
	n *= 2;
	
	for (int i = 1; i <= n; i ++)
		for (int j = 1; j <= n; j ++)
			if (j != i)
				f[i][j] = INF;
	
	for (int len = 2; len <= n; len ++)
		for (int i = 1; i <= n - len + 1; i ++)
		{
			int j = i + len - 1;
			for (int k = i; k < j; k ++)
			{
				f[i][j] = min (f[i][j], s[j] - s[i - 1] + f[i][k] + f[k + 1][j]);
				g[i][j] = max (g[i][j], s[j] - s[i - 1] + g[i][k] + f[k + 1][j]);
			}
		}
	
	for (int i = 1; i <= n / 2; i ++)
		ans = min (ans, f[i][i + n / 2 - 1]), res = max (res, g[i][i + n / 2 - 1]);
	
	printf ("%d\n%d\n", ans, res);
	
	return 0;
}
2022/10/28 10:32
加载中...