| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3185 人关注过本帖
标题:杭电ACM 1003求大神看看为什么A不了
只看楼主 加入收藏
qq200258
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-10-29
结帖率:0
收藏
 问题点数:0 回复次数:22 
杭电ACM 1003求大神看看为什么A不了
显示 超时 求大神帮看看哪里不对了

程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[20];
    int i,j,k,t,b,num,sum = 0,cmp = 0;
    scanf("%d",&t);
    for(i = 0;i < t;i++)
    {
        scanf("%d",&num);
        for(j = 0;j < num;j++)
        {
            scanf("%d",&a[j]);
            sum += a[j];
        }
        k = num;
        for(j =  num - 1;j > 0;j--)
        {
            for(b = 0;b < j;b++)
            {
                cmp += a[b];
            }
            if(sum <= cmp)
            {
                sum = cmp;
                k = j;
            }
            cmp = 0;
        }
        printf("Case %d:\n",i + 1);
        printf("%d %d %d\n\n",sum,1,k);
        k = 0;
        sum = 0;
    }

    return 0;
}



[此贴子已经被作者于2017-4-19 22:07编辑过]

搜索更多相关主题的帖子: color 
2017-04-19 21:39
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
最好还是把题目贴一下吧~毕竟要人人都主动去看题目这样不太现实~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-19 23:25
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 楼主 qq200258
http://acm.hdu.
2017-04-19 23:50
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 楼主 qq200258
时间复杂度 应该是O(n)

1、相邻 同符号 数相加(融合) O(n)
2、选取相容后最大数, 向 前后 遍历, 遍历完了 结束, 遍历过程中 会令 新的和 不小于 原来的和 就可以移动数字包含的区间 O(n)   
2017-04-19 23:58
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
就是求最大子数列啊~刚刚研究了划分平方那贴要求子区间的和~
求任意两段子区间(a,b)就等于(0,b)-(0,a)

结果用前面的数加后面的数~并在这个过程中寻找最大值和最小值~区间就是这个最大值和最小值所在的区间~
一个for循环两个条件判断就可以解决了~

[此贴子已经被作者于2017-4-20 01:14编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-20 01:13
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
因为比较是从基点0开始~所以如果是全非正数数则属于特殊情况要另外考虑~

原理就是中间两段数据(a,b)可以看成(0,b)-(0,a)只需求(0,b)之间取两个值x2-x1  (x1<=x2)的最大值就是了~

如果题目要求不能全部为非正数(我当时看这类题目的时候看到有这个条件)则可以省略一些判断~
参考代码如下~

程序代码:
#include<stdio.h>
#include<limits.h>

int main()
{
    int t=0;
    int n=0;
    int k=0;
    int i=0;
    int flag=1;

    int x1=0;
    int x2=1;

    int sum=0;
    int min=0;
    int max=INT_MIN;
    int max2=INT_MIN;

    scanf("%d",&t);

    for (i=1;i<=t;++i)
    {
        scanf("%d",&n);

        sum+=n;

        if (n>0)
            flag=0;

        if (flag&&n>max2)
        {
            max2=n;
            x1=i;
            x2=i;
        }

        if (sum<min||(n==0&&i==1))
        {
            min=sum;
            k=i;  
        }

        if (sum-min>max)
        {
            max=sum-min;
            x1=k;
            x2=i;
        }
    }

    if (!flag)
        printf("%d %d %d\n",max,x1+1,x2);
    else
        printf("%d %d %d\n",max2,x1,x2);

    return 0;
}


[此贴子已经被作者于2017-4-20 19:09编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-20 04:20
qq200258
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-10-29
收藏
得分:0 
回复 2楼 九转星河
好哒 第一次来 不太懂
2017-04-20 11:55
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 6楼 九转星河
第一个数为负数时,结果出错。
2017-04-20 18:19
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 8楼 xzlxzlxzl
感觉测试还是找不出问题~能否举个出错示例?~

应该是第一个数为0时~

[此贴子已经被作者于2017-4-20 19:04编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-20 19:02
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 9楼 九转星河
input:
-5 7 0 6 -1 1 -6 7

output:
-2147483648 0 1
2017-04-20 19:06
快速回复:杭电ACM 1003求大神看看为什么A不了
数据加载中...
 
   



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

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