TLE 44分
查看原帖
TLE 44分
808466
htdlz楼主2024/7/10 16:41

测评记录
已经改的和题解差不多了……

#include <bits/stdc++.h>
#define int long long

using namespace std;

int n, f[800][800], ans;

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> f[i][i], ans = max(f[i][i], ans);
	for (int l = 2; l <= n; l++) {
		for (int i = 1; i + l - 1 <= n; i++) {
			int j = i + l - 1;
			for (int k = i; k < j; k++) {
				if (f[i][k] == f[k + 1][j] && f[i][k] && f[k + 1][j]) {
					f[i][j] = max(f[i][k] + f[k + 1][j], f[i][j]);
					break;
				}
			}
			for (int h = i, t = j; h <= t; ) {
				if (f[h][t]) break;
				if (!f[i][h]) ++h;
				else if (!f[t][j]) --t;
				else if (f[i][h] == f[t][j]) {
					if (f[h + 1][t - 1]) {
						f[i][j] = max(f[i][h] + f[t][j] + f[h + 1][t - 1], f[i][j]);
					}
					else ++h, --t;
				}
				else if (f[i][h] < f[t][j]) ++h;
				else if (f[i][h] > f[t][j]) --t;
			}	
			ans = max(ans, f[i][j]);
		}
	}
	cout << ans << '\n';
	return 0;
}	
2024/7/10 16:41
加载中...