求助 O(n^3) WA78pts
查看原帖
求助 O(n^3) WA78pts
1066565
Zhang_xiangyou楼主2025/7/31 09:06

rt.

#include <bits/stdc++.h>
using namespace std;
#define intt long long
intt n,a[405];
intt dp[405][405],sum[405];
int main()
{
	scanf("%lld",&n);
	for (int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
		sum[i] = sum[i-1] + a[i];
		dp[i][i] = a[i];
	}
	for (int len=2;len<=n;len++)
	{
		for (int l=1;l+len-1<=n;l++)
		{
			int r = l+len-1;
			for (int k=l,p=r-1;k<r;k++)
			{
				while (k <= p && sum[k]-sum[l-1] > sum[r]-sum[p]) p--;
				if (sum[k]-sum[l-1] == sum[r]-sum[p] && dp[l][k]==sum[k]-sum[l-1] && dp[k+1][p]==sum[p]-sum[k] && dp[p+1][r] == sum[r]-sum[p])
				{
					dp[l][r] = max(dp[l][r],sum[r]-sum[l-1]);
					break;
				}
				else
				{
					dp[l][r] = max(dp[l][r],max(dp[l][k],max(dp[k+1][p],dp[p+1][r])));
				}
			}
		}
	}
	printf("%lld",dp[1][n]);
	return 0;
}

看了眼题解好像没有这样写的。

谢谢dalao。

2025/7/31 09:06
加载中...