NYOJ 44(最大连续子序列和)

简介:   子串和 时间限制:5000 ms | 内存限制:65535 KB 难度:3   描述给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1

 

子串和

时间限制: 5000 ms | 内存限制: 65535 KB
难度: 3
 
描述
给定一整型数列{a 1,a 2...,a n},找出连续非空子串{a x,a x+1,...,a y},使得该子序列的和最大,其中,1<=x<=y<=n。
 
输入
第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)
输出
对于每组测试数据输出和最大的连续子串的和。
样例输入
1
5
1 2 -1 3 -2
样例输出
5
提示
输入数据很多,推荐使用scanf进行输入 
/*肯定是连续子序列和,否则只需把整数相加即可*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[1000001];
/*int cmp(const void *a,const void *b)
{
	return *(int *)a-*(int *)b;
}*/
int subsequencesum(int a[],int n)
{
	int sum=0,maxsum=0,i;
	for(i=0;i<n;i++)
	{
		sum+=a[i];
		if(sum>maxsum)
			maxsum=sum;   
		else
			if(sum<0)
				sum=0;
	}
	return maxsum;
}
int main()
{
	int i,T;int num,max=-101;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&num);
		//memset(a,0,sizeof(a));
		for(i=0;i<num;i++)
		{
			scanf("%d",a+i);
			if(a[i]>max)/*用qsort函数会浪费大量时间,而且wa啦*/
				max=a[i];
		}
		//qsort(a,num,sizeof(int),cmp);/*全是负数的情况要特殊考虑*/
		printf("%d\n",max<=0?max:subsequencesum(a,num));
	}
	return 0;
}



//TLE,十个数就40s
#include<stdio.h>
#include<string.h>
//#include<time.h>
int a[1000001];
int subsequencesum(int a[],int n)
{
int sum,maxsum=0,i,j,k;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
{
sum=0;
for(k=i;k<=j;k++)
sum+=a[k];
if(sum>maxsum)
maxsum=sum;
}
return maxsum;
}
int main()
{
	int i,j,T;int num;
	//time_t start,end;
//	start=time(NULL);
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&num);
		memset(a,0,sizeof(a));
		for(i=0;i<num;i++)
			scanf("%d",a+i);
		printf("%d\n",subsequencesum(a,num));
	}
//	end=time(NULL);
//	printf("%d\n",end-start);
	return 0;
}

  

目录
相关文章
|
7月前
|
机器学习/深度学习 算法 测试技术
【动态规划】【最长子序列】2901. 最长相邻不相等子序列 II
【动态规划】【最长子序列】2901. 最长相邻不相等子序列 II
|
7月前
|
算法 C++
【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目
【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目
|
2月前
|
算法
674.最长连续递增序列、5. 最长回文子串(2021-11-05)
674.最长连续递增序列、5. 最长回文子串(2021-11-05)
23 0
|
7月前
最长连续不重复子序列
最长连续不重复子序列
35 1
|
7月前
leetcode-581:最短无序连续子数组
leetcode-581:最短无序连续子数组
34 0
|
7月前
|
机器学习/深度学习
【剑指offer】-和为S的连续正数序列-39/67
【剑指offer】-和为S的连续正数序列-39/67
剑指offer 64. 和为S的连续正数序列
剑指offer 64. 和为S的连续正数序列
67 0
|
算法
【12. 最大连续不重复子序列】
. 最大连续不重复子序列
118 0
【12. 最大连续不重复子序列】
|
机器学习/深度学习
子序列-反转区间求最长不下降子序列
题目描述 小Z有一个01序列A=(A1,A2,A3,…,An)。他可以进行一次操作:选择一个区间L,R将其反转。 例如,对于序列A=(1,0,0,1,1),当L=2,R=4时,原序列将变为(1,1,0,0,1)。 小Z希望:通过这一次反转操作,使得这个序列的最长不下降子序列的长度尽可能的大,并想让你输出这个最大值。 一个序列的不下降子序列定义为:对于一个序列(p1,p2,…,pk)满足1≤p1<p2<…<pk≤n(n≤819200)且Ap1≤Ap2≤…≤Apk。则序列(Ap1,Ap2,…,Apk)为不下降子序列,其中k为这个不下降子序列的长度。 输入 一行一个01字符串,表示序列A
239 0
子序列-反转区间求最长不下降子序列