又一个经典问题,对于一个包含负值的数字串array[1...n],要找到他的一个子串array[i...j](0<=i<=j<=n),使得在array的所有子串中,array[i...j]的和最大。(array[]大概有1百万个数)
#include<stdio.h>
int main()
{
int t,n,x,i,j,sum,max;
scanf("%d",&t);
for(i=1;i<=t;i++){
scanf("%d",&n);
max=-101;
sum=0;
for(j=1;j<=n;j++){
scanf("%d",&x);
sum+=x;
if(sum>max)
max=sum;
if(sum<0)
sum=0;
}
printf("%d\n",max);
}
return 0;
}
总结: