当前位置: 代码迷 >> 综合 >> 51nod 2076 最大连续子段和
  详细解决方案

51nod 2076 最大连续子段和

热度:45   发布时间:2024-02-05 09:48:15.0

题目

给定有n个整数(可能为负整数)组成的序列a1,a2,…,an,求该序列连续的子段和的最大值。

如果该序列的所有元素都是负整数时定义其最大子段和为0。例如,当(a1,a2,a3,a4,a5)=(-5,11,-4,13,-4-2)时,最大子段和为11+(-4)+13=20。

输入
第一行整数个数N
第二行为N个整数,每个整数之间用一空格隔开。
1<=N<=100000
N个整数的范围为-1000到1000
输出
一行一个数,表示最大连续子段和的值
输入样例
5
384 -37 44 101 -377
输出样例
492

解题思路

用数组保存一串数 如果前面加起来比0小就舍弃 否则就相加

代码

#include <bits/stdc++.h>
#include<iostream>
#include <cmath>
#include <climits>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <deque>
#include <list>
#include <utility>
#include<cstring>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <bitset>
#include <iterator>
#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000
typedef long long ll;
const int MOD = 1E9+7;
const int N = 100000+5;
using namespace std;int a[N];
int main()
{int n;cin >> n;for(int i = 0;i < n; i++){cin >> a[i];}int sum = 0;int Max = 0;for(int i = 0; i < n; i++){if(sum<0){sum = a[i];}else{sum = sum + a[i];}if(Max < sum){Max = sum;}}cout << Max << endl;return 0;
}