HDU-1003-Max Sum

题目链接

题目大意就不讲了,看测试数据就可以看出来,

这里主要是超时问题,对于超时问题我们可以减少循环,减枝,.......这里利用的是减少循环,

我开始直接两个循环,超时。

不用说两个循环只能说明你没思考,对于这题只要一个循环就可以了。

直接看代码。

AC代码

#include<stdio.h>

int a[100005];

int main(void)
{
int t,n,i,j,k,k1,k2;
int s,max;
scanf("%d",&t);
int h=1;
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",a+i);
}
k=1;
max=-999999999;
s=0;
for(i=1;i<=n;i++)
{
s=s+a[i];
if(s>max)
{
max=s;
k1=k;
k2=i;
}
if(s<0)
{
k=i+1;
s=0;
}
}
printf("Case %d:\n",h++);
printf("%d %d %d\n",max,k1,k2);
if(t)
printf("\n");
}
return 0;
}

 

 

超时代吗

#include<stdio.h>

 
int main(void)
{
    int t,a[100005],n,i,j,k1,k2,s,s1,h;
    scanf("%d",&t);
    h=t;
    while(t--)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        s=-99999;
        k1=0;
        k2=0;
        for(i=0;i<n;i++)
        {
            s1=0;
            for(j=i;j<n;j++)
            {
                s1=s1+a[j];
                if(s1>s)
                {
                    k1=j;
                    k2=i;
                    s=s1;
                }
            }
        }
        printf("Case %d:\n",h-t);
        printf("%d %d %d\n\n",s,k2+1,k1+1);
    }
    return 0;
}
posted @ 2014-09-23 15:13  立刻行动  阅读(112)  评论(0编辑  收藏  举报