注意特判只有一个数的情况 最大子序列和问题 用O(n)的动态规划方法解决
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 10001;
long long a[MAXN];
int main(void)
{
freopen("pat0314/in.txt","r",stdin);
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i];
}
int num = 0;
for(int i = 0;i<n;i++)
{
if(a[i] < 0)
{
num++;
}
}
if(num == n)
{
printf("0 %lld %lld",a[0],a[n - 1]);
}
else if(n == 1)
{
printf("%d %d %d",a[0],a[0],a[0]);
}
else
{
long long maxsum = a[0];
int startindex,endindex;
int index;
long long result = a[0];
for(int i = 1;i<n;i++)
{
if(maxsum < 0)
{
index = i;
maxsum = a[i];
}
else
{
maxsum += a[i];
}
if(maxsum > result)
{
result = maxsum;
startindex = index;
endindex = i;
}
}
printf("%lld %lld %lld",result,a[startindex],a[endindex]);
}
return 0;
}```