求助
查看原帖
求助
882092
zMinYu楼主2022/11/20 17:36

rt

#include<bits/stdc++.h>
using namespace std;
int dp[405][405];
int n; 
long long ans=0;
int main()
{
	cin>>n;
	long long xl,xr;
	for(int i=1;i<=n;i++)
	{
		cin>>dp[i][i];
		if(ans<dp[i][i]) ans=dp[i][i];
	}
	for(int len=2;len<=n;len++)
	{
		for(int l=1,r=len;r<=n;l++,r++)
		{
			//两个三个饭团:
			for(int k=l;k<r;k++)
			{
				if(dp[l][k]&&dp[l][k]==dp[k+1][r])
				dp[l][r]=dp[l][k]+dp[k+1][r];
			} 
			xl=0,xr=0;
			long long ll=l,rr=r;
			while(ll<=rr)
			{
				if(dp[l][r]) break;
				if(!xl) xl+=dp[ll][ll],ll++;
				else if(!xr) xr+=dp[rr][rr],rr--;
				else if(xl<xr) xl+=dp[ll][ll],ll++;
				else if(xl>xr) xr+=dp[rr][rr],rr--;
				else
				{
					if(dp[ll][rr])
					{
						dp[l][r]=dp[l][ll-1]+dp[ll][rr]+dp[rr+1][r];
					}
					else
					{
						ll++;
						rr--;
					}
				}
			}
			if(dp[l][r]>ans) ans=dp[l][r];
		}
	}
	cout<<ans;
	return 0;
}

2022/11/20 17:36
加载中...