南邮 OJ 1142 最大连续和

最大连续和

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 1238            测试通过 : 224 

比赛描述

给出一个长度为n的序列A1A2An,求最大的连续和。要求找到1in,使得Ai+Ai+1+…+Aj尽量大。

输入

1行输入一个正整数nn1000),此后输入n行,每行给出一个测试用例,包含正整数mm个整数,以空格分隔各个数。

输出

输出n行。对于每一个测试用例,在一行输出最大的连续和。

样例输入

2
3 1 -1 3
3 1 2 3

样例输出

3
6

题目来源

刘汝佳《算法竞赛入门经典》




#include<stdio.h>
#define MX_N 1000

int a[MX_N],s[MX_N];
int main(){
	int n,m,i,min_s,result;
	scanf("%d",&n);
	while(n--){
		scanf("%d",&m);
		for(i=0;i<m;i++){
			scanf("%d",&a[i]);
		}
		s[0]=a[0];
		for(i=1;i<m;i++){
			s[i]=s[i-1]+a[i];		//s[i]=a[0]+……a[i]
		}
		min_s=0;
		result = a[0];
		for(i=0;i<m;i++){
			if(result<s[i]-min_s){	//s[i]-min_s就是以第i项为最后一项的最大连续和
				result = s[i]-min_s;
			}
			if(min_s>s[i]){			//记录前面i个和中的最小值
				min_s = s[i];
			}
		}
		printf("%d\n",result);	
	}
}






你可能感兴趣的:(ACM,南邮OJ)