这是一道非常基础的dp动规问题,代码如下
#include<cstdio>
#include<iostream>
#define L 500005
using namespace std;
long long int num[L],dp[4][L],n,i,j;
long long int max(long long int a,long long int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
long long int Max;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>num[i];
}
for(i=1;i<=3;i++)
{
Max=-1000000001;
for(j=i;j<=n;j++)
{
if(i==j)
{
dp[i][j]=dp[i-1][j-1]+num[j];
}
else
{
Max=max(Max,dp[i-1][j-1]);
dp[i][j]=max(Max,dp[i][j-1])+num[j];
}
}
}
Max=-1000000001;
for(j=3;j<=n;j++)
{
if(dp[3][j]>Max)
Max=dp[3][j];
}
cout<<Max<<endl;
}