A1007
最大连续子序列求和
#include<bits/stdc++.h>
using namespace std;
const int maxn=10010;
int k,a[maxn],dp[maxn],num[maxn];
int main()
{
scanf("%d",&k);
for(int i=0;i<k;i++)
{
scanf("%d",&a[i]);
}
dp[0]=a[0];//边界
num[0]=1;
for(int i=1;i<k;i++)
{
dp[i]=max(a[i],dp[i-1]+a[i]);
if(dp[i]==a[i]) num[i]=1;
if(dp[i]==dp[i-1]+a[i]) num[i]=num[i-1]+1;
}
int b=0;
for(int i=1;i<k;i++)
{
if(dp[i]>dp[b])
{
b=i;
}
}
if(dp[b]<0) printf("0 %d %d",a[0],a[k-1]);
else printf("%d %d %d",dp[b],a[b-num[b]+1],a[b]);//输出最大序列和
return 0;
}