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<stdio.h>
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章