栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最大子段和

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最大子段和

问题描述

给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。

要求算法的时间复杂度为O(n)。

输入格式

输入有两行:
第一行是n值(1<=n<=10000);
第二行是n个整数。

输出格式

输出最大子段和。

输入样例

6
-2 11 -4 13 -5 -2

输出样例

20

#include 

using namespace std;

const int N = 10010, INF = 1e9;

int n, res;
int a[N];

int main() {
	cin >> n;
	for (int i = 1; i <= n; i ++ ) cin >> a[i];
	
	res = -INF;
	for (int i = 1; i <= n; i ++ ) 
		for (int j = 1; j <= i; j ++ ) {
			int sum = 0;
			bool st = false;
			for (int k = j; k <= i; k ++ ) {
				if (a[k] > 0) st = true;
				sum += a[k];
			}
			if (st == false) sum = 0;
 			res = max(res, sum);
		}
		
	cout << res << endl;
	
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311832.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号