AC 但求调
查看原帖
AC 但求调
778154
FluoroantimonicAcid楼主2025/6/26 21:59

RT,把 N 定为 37 最后一个点会 RE,但改成 77 就可以过,但最后一个点 N 只有 25,按理来讲不应该 RE,而且本地可以正常运行。

5.in:

25
9 8 9 9 5 7 4 2 2 4 5 6 7 8 9 3 3 4 5 1 2 1 2 3 2

5.out:

781495238
8 4 2 1 3 6 5 7 16 12 10 9 11 14 13 15 20 18 17 19 23 21 22 24 25

code:

%:import "iostream"
%:import "vector"
%:import "functional"
%:define For(a, b, c) for (int a = b, a%:%:END = c; a <= a%:%:END; ++ a)
%:define int unsigned
using namespace std;
const int N = 37;
int n, v[N], dp[N][N], root[N][N];
main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n;
	For (i, 1, n) cin >> v[i];
	For (i, 1, n + 1) dp[i][i - 1] = 1;
	For (i, 1, n) dp[i][i] = v[i], root[i][i] = i;
//	For (i, 2, n) dp[i - 1][i] = v[i - 1] + v[i];
	For (len, 2, n)
		For (i, 1, n) {
			const int j = i + len - 1;
			For (k, i, j)
				if (dp[i][j] < dp[i][k - 1] * dp[k + 1][j] + dp[k][k]) {
					dp[i][j] = dp[i][k - 1] * dp[k + 1][j] + dp[k][k];
					root[i][j] = k;
				}
		}
	cout << dp[1][n] << R"(
)";

	function<void(int, int)> print = [&](int l, int r) -> void {
		if (l > r) return;
		cout << root[l][r] << ' ';
		if (l == r) return;
		print(l, root[l][r] - 1);
		print(root[l][r] + 1, r);
	};
	print(1, n);
}
2025/6/26 21:59
加载中...