最大子段和
代码实现如下:
#include<bits/stdc++.h>
using namespace std;
int n;
long long a[50005];
long long sum[5005];
long long MAX=-1;
int main (){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
if(sum[i-1]>0){//若(i-1)位置的sum数组为正,与i位置相加更大
sum[i]=sum[i-1]+a[i];
}
else{ //若为负,则相加更小,便直接取i位置a数组的值
sum[i]=a[i];
}
if(sum[i]>MAX){//若当前位sum>MAX,就为MAX赋sum的值
MAX=sum[i];
}
}
if(MAX<0){
MAX=0;
}
cout<<MAX;
}
ps:因题目要求为负则为0,故多写一步
sum up:用前缀和的方法记录每个数字之前所有数字的最大和并加以比较
本文来自博客园,作者:MegaSam,转载请注明原文链接:https://www.cnblogs.com/MegaSamTXL/p/17607153.html