#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+7;
long long a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,t=0;
scanf("%d",&n);
//题中说如果全部是负数,那么就直接输出第一个和最后一个并且总值输出0
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
if(a[i]<0)t++;//直接考虑负数情况
a[i]+=a[i-1];
}
//排除全是负数情况
if(t==n)
{
cout<<"0"<<" "<<a[1]<<" "<<a[n]-a[n-1];
return 0;
}
//双循环找出最大值,注意前缀和的一段,他的开头和结尾值求法是相反的
long long ans=-1e9,x,y;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(a[j]-a[i]>ans)
{
ans=a[j]-a[i];
x=a[i+1]-a[i];
y=a[j]-a[j-1];
}
}
}
cout<<ans<<" "<<x<<" "<<y;
return 0;
}
PAT1007 Maximum Subsequence Sum前缀和暴力
最新推荐文章于 2024-09-27 16:22:58 发布