#include<iostream>
#include<string.h>
#include<climits>
using namespace std;
int a[10010],d[10010];
int main(){
int n,sum=0,temp=INT_MIN,begin,end;
bool flag;
memset(d,0,sizeof(d));
memset(a,0,sizeof(a));
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++){
if(a[i]>=0){
flag=true;
break;
}
}
for(int i=1;i<=n;i++)
{
d[i]=max(d[i-1]+a[i],a[i]);
if(d[i]>temp){
end=i;
temp=d[i];
}
}
for(int j=end;j>=1;j--){
sum+=a[j];
if(sum==temp){
begin=j;
}
}
if(flag==false) printf("0 %d %d",a[1],a[n]);
else printf("%d %d %d",temp,a[begin],a[end]);
}
题目来源及自己的思路
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)