hdu 1003 求最大子序列和

 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;

int a[110000],d[110000];

int main()
{
    int T,i,n,ca=0,max,s,e,sum,f=0;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }

        d[1]=a[1];
        for(i=2;i<=n;i++)
        {
            if(d[i-1]<0)
                d[i]=a[i];
            else
                d[i]=d[i-1]+a[i];
        }
        max=d[1];e=1;
        for(i=2;i<=n;i++)
        {
            if(max<d[i])
                max=d[i],e=i;
        }

        s=e;
        sum=0;
        for(i=e;i>0;i--)
        {
            sum=sum+a[i];
            if(sum==max)
                s=i;
        }
        if(f!=0) printf("\n"); f++;
        printf("Case %d:\n",++ca);
        printf("%d %d %d\n",max,s,e);
       
            
    }
    return 0;
}

你可能感兴趣的:(hdu 1003 求最大子序列和)