제출 #1343845

#제출 시각아이디문제언어결과실행 시간메모리
1343845ppmn_6Cigle (COI21_cigle)C++20
100 / 100
170 ms98536 KiB
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n, ans = 0;
	cin >> n;
	vector<int> a(n + 1);
	vector<vector<int>> dp(n + 1, vector<int>(n + 1, 0));
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 2; i <= n; i++) {
		for (int j = 2; j < i; j++) {
			dp[j][i - 1] = max(dp[j][i - 1], dp[j - 1][i - 1]);
		}
		int lsum = 0, rsum = 0, l = i - 1, r = i, cnt = 0, best = 0;
		while (true) {
			if (!l || r > n) {
				break;
			}
			best = max(best, dp[l][i - 1] + cnt);
			dp[i][r] = max(dp[i][r], best);
			if (lsum <= rsum) {
				lsum += a[l];
				l--;
			}
			else {
				rsum += a[r];
				r++;
			}
			if (lsum == rsum) {
				cnt++;
			}
		}
		for (int j = r; j <= n; j++) {
			dp[i][j] = max(best, dp[i][j]);
		}
	}
	for (int i = 1; i <= n; i++) {
		ans = max(ans, dp[i][n]);
	}
	cout << ans;
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...