洛谷P1115: https://www.luogu.com.cn/problem/P1115
本题是想求出给定序列的最大子序列和,根据题意,可以从第一个数开始遍历,每次将此数a[i],与此数与之前保留的和的和(a[i]+b[i]-1)比较取较大值,
再将b[i]与所保存最大值ans比较,从而求解。
开始做题时因为此题是在前缀和的题单中,所以一直把想法局限在利用前缀和求解,利用前缀和固然能求出,但翻阅题解后,发现此方法更加精妙,代码更加简化易懂。
详见代码如下:
#include<bits/stdc++.h>
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<<ans;
return 0;
}
如有错误 敬请指正 ~~
大家多多点关注哦~~