华师一附中OI组

标题: P1115 最大子段和 [打印本页]

作者: admin    时间: 2018-6-29 17:49
标题: P1115 最大子段和
https://www.luogu.org/problemnew/show/P1115

题目描述
给出一段序列,选出其中连续且非空的一段使得这段和最大。

输入输出格式
输入格式:
第一行是一个正整数 N ,表示了序列的长度。

第二行包含 N 个绝对值不大于10000 的整数 A_i,描述了这段序列。

输出格式:
一个整数,为最大的子段和是多少。子段的最小长度为 1 。

输入输出样例
输入样例#1:
7
2 -4 3 -1 2 -4 3
输出样例#1:
4
说明
【样例说明】

2,-4,3,-1,2,-4,3 中,最大的子段和为4,该子段为 3,-1,2

【数据规模与约定】

对于40% 的数据,有 N≤2000 。

对于 100% 的数据,有 N≤200000 。
作者: admin    时间: 2018-8-15 09:18
有多种做法,每种做法都应该试验一下,可以学到很多的编程思想
1、盲目穷举 起点,终点,循环计算总和,判断最大值,三重循环,很好理解,编程也很好实现
2、利用前缀和,减少一重循环,前缀和也是一种很普适的思想,编程不难,体验一下
3、二分法
4、精妙的累加判断法。
作者: 黄煦喆    时间: 2018-8-25 16:50
  1. #include<iostream>
  2. using namespace std;
  3. int n,a[200001];
  4. long long ans=-400000,x;
  5. int main()
  6. {
  7.     cin>>n;
  8.     for(int i=1; i<=n; i++)
  9.     {
  10.         cin>>a[i];
  11.         x+=a[i];
  12.         if(x>ans)ans=x;
  13.         if(x<0)x=0;
  14.     }
  15.     cout<<ans;
  16.     return 0;
  17. }
复制代码





欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2