Submission #707168

#TimeUsernameProblemLanguageResultExecution timeMemory
707168emptypringlescanCigle (COI21_cigle)C++17
100 / 100
346 ms196192 KiB
#include <bits/stdc++.h>
using namespace std;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin >> n;
	long long arr[n],dp[n][n];
	for(int i=0; i<n; i++) cin >> arr[i];
	memset(dp,0,sizeof(dp));
	long long ans=0;
	for(int i=1; i<n; i++){
		long long pref[n];
		pref[0]=dp[0][i-1];
		for(int j=1; j<i; j++) pref[j]=max(pref[j-1],dp[j][i-1]);
		int c=i-1,be=0;
		long long len=0,len2=0;
		for(int j=i; j<n; j++){
			len+=arr[j];
			while(len2<len&&c>=0){
				len2+=arr[c];
				c--;
			}
			if(c>-1) dp[i][j]=pref[c]+be;
			if(len2==len) be++;
		}
		long long best=0;
		len=0; len2=0; c=i-1; be=0;
		for(int j=i; j<n; j++){
			len+=arr[j];
			while(len2<len&&c>=0){
				len2+=arr[c];
				best=max(best,dp[c][i-1]+be);
				c--;
			}
			if(len==len2) be++;
			dp[i][j]=max(dp[i][j],best);
			ans=max(ans,dp[i][j]);
		}
	}
	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...