#include <stdio.h>
int MaxSubseqSum(const int A[], int* p, int* q, int N)
{
int ThisSum = 0, MaxSum = 0;
for (int i = 0; i < N; i++){
ThisSum += A[i];
if (ThisSum > MaxSum)
MaxSum = ThisSum;
else if (ThisSum < 0)
ThisSum = 0;
}
if (MaxSum == 0){
int flag = 0, i = 0;
while (i < N){
if (A[i] >= 0)
flag = 1;
i++;
}
if (flag){
*p = 0, *q = 0;
return 0;
} else{
return MaxSum;
}
}
else {
ThisSum = 0;
for (int i = 0; i < N && ThisSum != MaxSum; i++){
ThisSum += A[i];
if (ThisSum < 0)
ThisSum = 0, *p = A[i+1];
else if (ThisSum == MaxSum)
*q = A[i];
}
}
return MaxSum;
}
int main(int argc, char const *argv[])
{
int Subseq[100000], N, MaxSum = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d", &Subseq[i]);
int begin = Subseq[0], end = Subseq[N-1];
MaxSum = MaxSubseqSum(Subseq, &begin, &end, N);
printf("%d %d %d", MaxSum, begin, end);
return 0;
}
01-复杂度2 Maximum Subsequence Sum
最新推荐文章于 2024-05-19 15:25:35 发布