标题:有哪些方法可以解决超时问题?
只看楼主
tzzy
Rank: 1
来 自:皖浙
等 级:新手上路
帖 子:17
专家分:6
注 册:2009-8-7
结帖率:100%
已结贴  问题点数:20 回复次数:1 
有哪些方法可以解决超时问题?
超时,困扰了我好久,每每遇到一个问题,代码往往正确,但提交后 Time Limit Exceeded(超时)。
遇到超时,我就不会解决。。。请大家 给点意见,通常解决超时有哪些方法?
比如 这道题目:让你求最大子序列之和。先输入T(1<=T<=20)组测试数据,再输入N(1<=N<=100000), 接下来N个整数(在-1000到1000之间)。输出:第一行:测试的组数:"Case #:", #代表组数。
第二行:输出最大子序列的和,再输出该序列的第一个数的位置,和最后一个数的位置。两组之间再空一行。
比如:输入:
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5
输出:
Case 1:
14 1 4

Case 2:
7 1 6
这是我的代码:(老是超时。。)
#include <stdio.h>   
int main()   
{   
    int i,k,n,sumk,x=0,t;   
    int s[100000],sum[100000],a[100000]; //sum[]存放子序列的和。数组空间不要担心过大 ,这个没问题的。   
   scanf("%d",&t);
   while(t--)
    {   
        x++;//控制输出的组数,见下面。
        sumk=k=0; //初始化为0
        scanf("%d",&n);//输入个数
        for(i=0;i<n;i++)   
        {   
            scanf("%d",&s[i]);   
            if(sumk>=0)    //判断sumk是否大于0
            {   
                sumk+=s[i];   
                a[i]=k;   
            }   
            else   
            {   
                sumk=s[i];
                a[i]=k=i;   
            }   
            sum[i]=sumk;//把每个子序列的和存放在sum[]里
        }      
            k=0;   
            for(i=1;i<n;i++)   
                if(sum[i]>sum[k])   //比较找出最大子序列的和
                    k=i;   
            printf("Case %d:\n",x);
            printf("%d %d %d\n",sum[k],a[k]+1,k+1);
            if(t!=0)//判断输出的空行
                printf("\n");
    }   
    return 0;   
}   

请大家给点意见,要慷慨解囊哦!!!
谢谢!!!


[ 本帖最后由 tzzy 于 2009-8-11 17:03 编辑 ]
搜索更多相关主题的帖子: 超时 最大子序列 
2009-08-11 17:01
xiaogu149162
Rank: 2
等 级:论坛游民
帖 子:47
专家分:97
注 册:2009-7-16
得分:14 
没有力量帮你,我也想学学
2009-08-11 17:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-282282-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.155778 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved