#include <iostream>
#include <cstdio>
using namespace std;
int MaxSubSeqSum(int A[],int N){
int ThisSum,MaxSum;
int i;
ThisSum = MaxSum = 0;//初始化为0 当子列和为负数时输出0
for(i=0;i<N;i++){
ThisSum += A[i];//向右依此加和
if(ThisSum > MaxSum){
MaxSum = ThisSum;//更新最大子列
}
else if(ThisSum <0)//若当前子列为负数,则对后面无效 抛弃之
//(子列为负数有两种情况:
//1.开始相加的是负数,所以遇到正数前都要舍弃;
//2.先是正数,之后加的负数太多,子列和变为负数,此时也舍弃,
// 因为不管从这里的哪一位数开始向后加和,都是不会增大子列和的,因此舍弃从新的一位开始)
ThisSum =0;
}
return MaxSum;
}
int main()
{
int N =0;
cin>>N;
int *A = new int[N];
if(A == 0){
cout<<"Error";
exit(0);
}
for(int i=0;i<N;i++){
cin>>A[i];
}
cout<<MaxSubSeqSum(A,N);
system("pause");
return 0;
}
最大子列和
最新推荐文章于 2022-04-14 15:52:40 发布