子串和
來源: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;
}