洛谷P1115最大子段和

洛谷P1115: https://www.luogu.com.cn/problem/P1115

本题是想求出给定序列的最大子序列和,根据题意,可以从第一个数开始遍历,每次将此数a[i],与此数与之前保留的和的和(a[i]+b[i]-1)比较取较大值,
再将b[i]与所保存最大值ans比较,从而求解。

开始做题时因为此题是在前缀和的题单中,所以一直把想法局限在利用前缀和求解,利用前缀和固然能求出,但翻阅题解后,发现此方法更加精妙,代码更加简化易懂。

详见代码如下:

#include
using namespace std;
int n,a[200020],b[200020],i,ans;
int main(){
cin>>n;
for(i = 1;i <= n;i++){
cin>>a[i];
if(i < 2) b[i] = a[i];
else b[i] = max(a[i],b[i-1]+a[i]);
if(i < 2) ans = b[i];
ans = max(ans , b[i]);
}
cout< return 0;
}

如有错误 敬请指正 ~~
大家多多点关注哦~~

你可能感兴趣的:(算法)