最大子列和

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值