题意:
输入K个数,找到最大子串,输出 最大和、最大子串的第一个数和最后一个数。
如果最大和为负,则输出 最大和为0、数列第一个数 和 数列最后一个数
重点:
MaxSum = Num[0]
using namespace std;
int Num[100001];
int main(){
int K;
while(scanf("%d", &K) == 1){
for(int i = 0 ; i < K; ++i)
scanf("%d", &Num[i]);
int x1 = 0, x2 = 0;
int t = 0;
int MaxSum = Num[0], ThisSum = 0;
for(int i = 0 ; i < K; ++i){
ThisSum += Num[i];
if(ThisSum > MaxSum){
MaxSum = ThisSum;
x1 = t;
x2 = i;
}
if(ThisSum < 0){
ThisSum = 0;
t = i + 1;
}
//printf("x1=%d x2=%d ThisSum=%d MaxSum=%d t=%d i=%d\n", x1, x2, ThisSum, MaxSum, t, i);
}
if(MaxSum < 0){
x1 = 0;
x2 = K - 1;
MaxSum = 0;
}
printf("%d %d %d\n", MaxSum, Num[x1], Num[x2]);
}
return 0;
}