题目大意: 给出一个长度为N的数列(N<=50000),数列中每个数|ai|<=10000,求最大连续子序列的和。
考察点:DP
思路分析:f[i]=max(f[i-1]+a[i],0),f[i]表示到第ai的最大和
两次AC。。。漏了特判全负数的情况
#include<stdio.h>
#define max(x,y) (x)>(y)?(x):(y)
int main()
{
int n,i,j,t,k,m;
long int f[50002];int a[50002];
scanf("%d",&t);
for (k=1;k<=t;k++)
{
scanf("%d",&n);
j=0;f[0]=0;m=-50000;
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
f[i]=max(0,f[i-1]+a[i]);
j=max(f[i],j);
m=max(m,a[i]);
}
if (j==0)
{ printf("%d\n",m);
}
else printf("%d\n",j);
}
return 0;
}