题目大意: 题目很像hdu 1003那题,只不过改了一些输出方式,并且在输出的地方有了一些特殊的要求。需要额外注意一下。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a[10005];
int main(){
int k,count;
while(~(scanf("%d",&k))){
if(k==0)
break;
count=0;
for(int i=0;i<k;i++){
scanf("%d",&a[i]);
if(a[i]>=0)
count=1;
}
int l=0,max=-1001,la,lb,r,t;t=la=r=0;
for(int i=0;i<k;i++){
l=l+a[i];
if(l>max){
max=l;
la=t;r=i;
//printf("****%d %d\n",la,r);
}
if(l<0){
l=0;
t=i+1;
}
}
if(max<=0&&count==0)
printf("0 %d %d\n",a[0],a[k-1]);
else printf("%d %d %d\n",max,a[la],a[r]);
}
return 0;
}
若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。