过了但有个问题
查看原帖
过了但有个问题
1211668
WMY_楼主2024/10/16 17:52
#include <vector>
#include <iostream>

using namespace std;

#define LF "\n"

void input() {}
void input(auto&& x, auto&&... rest) {
	cin >> x;
	input(rest...);
}
void print() {}
void print(auto&& x, auto&&... rest) {
	cout << x;
	print(rest...);
}

#define N 100 + 10

vector<int> x;
int min_score = 0x1FFFFFFF;
int max_score = -0x1FFFFFFF;

int main() {
	int n;
	input(n);
	for (int i = 1; i <= n; i++) {
		int x;
		input(x);
		::x.emplace(::x.end(), x);
	}
	for (int _____ = 1; _____ <= n; _____++) {
		int kkk[N] = {};
		for (int i = 1; i <= n; i++)
			kkk[i] = kkk[i - 1] + x[i - 1];
		int F[N][N] = {};
		int G[N][N] = {};
		for (int i = 1; i < n; i++)
			for (int j = 1; j <= n - i; j++) {
				F[j][i + j] = 0x1FFFFFFF;
				G[j][i + j] = -0x1FFFFFFF;
				for (int k = j; k <= i + j; k++) {
					F[j][i + j] = min(F[j][i + j], F[j][k] + F[k + 1][i + j] + kkk[i + j] - kkk[j - 1]);
					G[j][i + j] = max(G[j][i + j], G[j][k] + G[k + 1][i + j] + kkk[i + j] - kkk[j - 1]);
				}
			}
		min_score = min(min_score, F[1][n]);
		max_score = max(max_score, G[1][n]);
		x.emplace(x.end(), x.front());
		x.erase(x.begin());
	}
	print(min_score, LF, (max_score >> 1), LF); 
	
    return 0;
}

为什么最后输出的时候要输出 max_score >> 1 才能过?

2024/10/16 17:52
加载中...