洛谷P1115最大子段和

   日期:2021-01-06     浏览:109    评论:0    
核心提示:洛谷P1115: https://www.luogu.com.cn/problem/P1115本题是想求出给定序列的最大子序列和,根据题意,可以从第一个数开始遍历,每次将此数a[i],与此数与之前保留的和的和(a[i]+b[i]-1)比较取较大值,再将b[i]与所保存最大值ans比较,从而求解。开始做题时因为此题是在前缀和的题单中,所以一直把想法局限在利用前缀和求解,利用前缀和固然能求出,但翻阅题解后,发现此方法更加精妙,代码更加简化易懂。详见代码如下:#include<bits/stdc+

洛谷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;
}

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

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服