2022.2.10 练习 PAT 甲 1007 Maximum Subsequence Sum (原题链接)
#include <bits/stdc++.h>
using namespace std;
int a[10010];
int dp[10010];
int main()
{
std::ios::sync_with_stdio(false);
int n;
cin>>n;
int num=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]<0)
num++;
dp[i]=a[i];
}
int res=0;
int l=0,r=n-1;
for(int i=0;i<n;i++)
{
if(i>0)
dp[i]=max(dp[i-1]+a[i],dp[i]);
res=max(res,dp[i]);
}
if(num==n)
cout<<0<<" "<<a[0]<<" "<<a[n-1];
else
{
for(int i=0;i<n;i++)
{
if(dp[i]==res)
{
r=min(r,i);
}
}
int tmp=0;
for(int i=r;i>=0;i--)
{
int t=tmp;
tmp+=dp[i];
if(tmp<t)
{
l=i+1;
break;
}
}
cout<<res<<" "<<a[l]<<" "<<a[r];
}
return 0;
}