NYOJ - 44:子串和

子串和

来源:NYOJ
标签:动态规划
参考资料:
相似题目:

题目

给定一整型数列{a1,a2…,an},找出连续非空子串{ax,ax+1,…,ay},使得该子序列的和最大,其中,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

解题思路

从第一个数A1到某个数An的最大子串和,取决于从A1到A(n-1)的最大子串和。

参考代码

#include
int main(){
	int N,n,d;
	scanf("%d",&N);
	while(N--){
		int prior,max;//prior是从A1到A(n-1)的最大子串和
		scanf("%d",&n);
		scanf("%d",&d);//先读入一个,方便给prior和max初始化
		prior=max=d;
		for(int i=1;i<n;i++){
			scanf("%d",&d);
			prior=d+prior>d?d+prior:d;
			max=max>prior?max:prior;
		}
		printf("%d\n",max);
	}
	return 0;
}

你可能感兴趣的:(【记录】算法题解)