#include <iostream>
using namespace std;
#define MAXN 10010
int main()
{
int num[MAXN];
int n,flag=0,flag0=0;
cin>>n;
int bg=0,ed=0,sum=0,maxsum=0,tb=0;
for(int i=0;i<n;i++){
cin>>num[i];
if(num[i]>0){
flag=1;
}else if(num[i]==0){
flag0=1;
}
sum+=num[i];
if(sum<0){
sum=0;
tb=i+1;
}
if(sum>maxsum){
maxsum=sum;
bg=tb;
ed=i;
}
}
if(flag==0&&flag0==0){
cout<<0<<" "<<num[0]<<" "<<num[n-1]<<endl;
}else if(flag==0&&flag0==1){
cout<<0<<" "<<0<<" "<<0<<endl;
}
else{
cout<<maxsum<<" "<<num[bg]<<" "<<num[ed]<<endl;
}
return 0;
}
注意
4
-1 0 0 -1这种情况
应该输出
0 0 0
很巧妙的数据
本文介绍了一个通过C++实现的算法,该算法用于找出数组中具有最大和的连续子数组,并输出该子数组的最大和及其起始和结束元素。讨论了特殊情况处理,例如所有元素均为负数的情况。
954

被折叠的 条评论
为什么被折叠?



