BIT 1010 Maximum Sum

来源:互联网 发布:linux 两台机器复制 编辑:程序博客网 时间:2024/06/05 23:00

题目大意: 给出一个长度为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;}