nyoj--983--首尾相连数组的最大子数组和(动态规划)

221人阅读 评论(0) 收藏 举报
分类:

首尾相连数组的最大子数组和

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述
给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选)。
输入
输入包含多个测试用例,每个测试用例共有两行,第一行是一个整数n(1=<n<=100000),表示数组的长度,第二行依次输入n个整数(整数绝对值不大于1000)。
输出
对于每个测试用例,请输出子数组和的最大值。
样例输入
6
1 -2 3 5 -1 2
5
6 -1 5 4 -7
样例输出
10
14
来源
淘宝2013年校园招聘一面面试题
上传者

ACM_张希鹏



/*可以首尾相连,并且每个数字只能用一次,还会出现负数,所以求出
整数正数相连的最大和,然后求出负数最小和*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAX 100100
int a[MAX];
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int sum=0;
		for(int i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			sum+=a[i];
		}
		int s=a[0],m=0;
		for(int i=0;i<n;i++)
		{
			m+=a[i];
			if(m>s)
			s=m;
			if(m<0)
			m=0;
		}
		int ss=a[0],mm=0;
		for(int i=0;i<n;i++)
		{
			mm+=a[i];
			if(ss>mm)
			ss=mm;
			if(mm>0)
			mm=0;
		}
		printf("%d\n",max(s,sum-ss));
	}
	return 0;
}



查看评论

nyoj 首尾相连数组的最大子数组和

这道题如果按照O(n*n)的复杂度写会TLE。。。 所以需要转化思想,其中有两种方法,可是我一种都没想到。 法一:构造虚假数列,即复制一遍数组放置于原数组后面,这样就可以看成求首尾不连接的最大和,...
  • Lin_disguiser
  • Lin_disguiser
  • 2016-03-07 20:02:43
  • 243

nyoj 983首尾相连数组的最大子数组和

首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组...
  • linyuxilu
  • linyuxilu
  • 2015-10-17 16:33:14
  • 289

NYOJ 983 首尾相连数组的最大子数组和(基础dp)

首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一...
  • CJ_035
  • CJ_035
  • 2018-03-18 08:09:39
  • 7

动态规划求不相邻的最大子数组和

#include"iostream" #define max(a,b)a>b?a:b using namespace std; main() { int a[100]; int i,j,n; int ...
  • u010814386
  • u010814386
  • 2013-09-06 14:24:10
  • 1049

最大子数组问题(动态规划)--【算法导论】

《算法导论》中引入这个问题是通过股票的购买与出售,将前一天的当天的股票差价重新表示出来,即转为了一个最大子数组的问题,具体内容我不多说,转的内容是: 13, -3, -25, 20, -3, -16...
  • xjm199
  • xjm199
  • 2014-01-07 10:32:01
  • 5157

动态规划-最大子数组和问题

题目描述 有整型数组int a[]={1,-2,3,10,-4,7,2,-5},求这个数组的最大子数组和 分析来手写一下求取最大子数组和序列的过程,用M[i]表示第i个数所对应的最大子数组和S[0...
  • Wisimer
  • Wisimer
  • 2016-08-09 21:44:54
  • 250

动态规划法求一个数组最大子段和的JAVA源代码

  • 2008年10月30日 13:21
  • 2KB
  • 下载

求不相邻的最大子数组和

问题1:给出一个数组,求出其中一个子集,使得子集中每个元素在原数组中两两都不相邻并使子集的和最大。 解法:对任意一个元素ai ,有两种可能: 选ai ,单选了ai 就不能选ai-1 ;不选ai 那么a...
  • dumpling5232
  • dumpling5232
  • 2016-09-14 22:32:59
  • 484

动态规划——数组最大子数组和

问题描述:给定一个整数数组a[0~n],求数组a的子数组,使其元素和为最大。问题分析:方法一:可以用普通的方法枚举所有的子数组,然后求出最大的子数组和,时间复杂度为O(n*n)。方法二:问题描述符合动...
  • clearriver
  • clearriver
  • 2009-05-29 15:27:00
  • 6633
    个人资料
    等级:
    访问量: 17万+
    积分: 7751
    排名: 3432
    最新评论