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。