思路:
求出数组中以某一位为最后一位的子段和,最后依次遍历该求出的数组,找出其中的最大值,即为我们所求的答案。
部分代码:
//x数组为输入的数组
//这个for循环就可以求得以其中某一位为子段的最后一位的最大值。
for(int i=1;i<n;i++){
if(x[i-1]>0){
x[i]=p[i]+x[i-1];
}
else{
x[i]=p[i];
}
}
完整AC代码:
#include<iostream>
using namespace std;
int p[200005];
int x[200005];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>p[i];
}
x[0]=p[0];
for(int i=1;i<n;i++){
if(x[i-1]>0){
x[i]=p[i]+x[i-1];
}
else{
x[i]=p[i];
}
}
int ans=x[0];
for(int i=1;i<n;i++){
if(ans<x[i]){
ans=x[i];
}
}
cout<<ans;
return 0;
}