| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 749 人关注过本帖
标题:Hdu上的一个题 ,总是wa,样例都过了。望各位多多相助!!!
只看楼主 加入收藏
有味
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2010-4-3
结帖率:100%
收藏
 问题点数:0 回复次数:9 
Hdu上的一个题 ,总是wa,样例都过了。望各位多多相助!!!
这是题:http://acm.hdu.
程序代码:
#include<iostream>
using namespace std;
int main()
{
    int T;
    int a[1001],b[1001];
    while (cin>>T&&T!=0)
    {   
          int temp,ans1,ans2,max;
          cin>>a[0];
          ans1=ans2=temp=b[0]=max=a[0];
          for (int i=1;i<T;i++)
          {
              cin>>a[i];
              if (b[i-1]<0)
              {b[i]=a[i];temp=a[i];}
              else b[i]=b[i-1]+a[i];
              if (max<b[i])
              {
                 max=b[i];
                 ans1=temp;
                 ans2=a[i];            
              }   
          }
          if (max>=0) cout<<max<<' '<<ans1<<' '<<ans2<<endl;
          else   cout<<"0"<<' '<<a[0]<<' '<<a[T-1]<<endl;
    }
    system("pause");
    return 0;   
} 
这是程序,样例都过了。但就是wa很是无语啊!
望各位多多相助!!! 先谢过啦!
搜索更多相关主题的帖子: Hdu 
2010-06-09 17:22
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
什么情况?详细说明!

南国利剑
2010-06-09 17:29
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
最大字段和有什么好说明的。
2010-06-10 09:22
有味
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2010-4-3
收藏
得分:0 
回复 2楼 南国利剑
最大连续子序列
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5832    Accepted Submission(s): 2238


Problem Description
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。

 

Input
测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( < 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。

 

Output
对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。

 

Sample Input
6
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
1
10
3
-1 -5 -2
3
-1 0 -2
0
 

Sample Output
20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0

以上就是题的原文。
2010-06-10 09:49
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
2530672    2010-06-10 12:47:05    Accepted    1231    171MS    328K    912 B    G++    wxjeacen
2010-06-10 12:49
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
太水的题目了。

哥中午吃饭的时候随便写了两行就过了。
2010-06-10 12:52
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<malloc.h>

int main()
{
    
    int m;
    while(1)
    {
    scanf("%d",&m);
    if ( 0 == m )
        break;
    int *buf=(int *) malloc( sizeof(int)*(m+1) );
    int *ref=(int *) malloc( sizeof(int)*(m+1) );
    for( int i=0;i<m;i++)
    {
        scanf("%d",buf+i);
    }
    ref[0]=buf[0]<0?0:buf[0];
    int sum=ref[0];
    for( int i = 1; i<m ;i++)
    {
        ref[i]=ref[i-1]+buf[i]<0? 0: ref[i-1]+buf[i];
        sum=ref[i]>sum? ref[i]:sum;
    }
    int begin=0,end,i;
    for( i=0;ref[i] < sum; i++)
    {
        if( ref[i] == 0)
        {
        begin=i+1;
        }
    }
    end=i;
    if ( sum ==0 )
    {
        int count=0;
        for( int j=0;j<m;j++)
        {
        if ( buf[j]<0 )
            count++;
        if( buf[j]==0 )
        {
            begin=j;
            end=j;
        }
        if ( count == m )
        {
            end=m-1;
        }
        }
    }
    printf("%d %d %d\n",sum,buf[begin],buf[end]);
    free(ref);
    free(buf);
    }
    return 0;
}
2010-06-10 13:37
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
孩子,题目都不好好看~~~~真是难为你了~~~
题目:
程序代码:
。。。 。。。
第1行给出正整数K( < 10000 ),
。。。 。。。

Huge input, scanf is recommended.
In your code
 
int a[1001],b[1001];

明白?
根本没必要用数组。下面是用你的思想写的不用数组的代码:
程序代码:
#include<stdio.h>
int main()
{
    int T;
    while(scanf("%d",&T) && T!=0)
    {
        int j,k,temp,begin,end,max,sum;
        scanf("%d",&k);
        sum = begin = temp = end = max = k;
        for(j=1;j<T;j++)    
        {
            scanf("%d",&k);
            if(0>sum)
            {
                temp=k;
                sum=k;
            }
            else
                sum+=k;
            if(sum>max)
            {  
                begin=temp;
                max=sum;
                end=k;
            }
        }
        if(max<0)
            printf("0 %d %d\n",begin,k);
        else  
            printf("%d %d %d\n",max,begin,end);
    }
    return 0;
}

2010-06-10 14:18
有味
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2010-4-3
收藏
得分:0 
回复 8楼 lijm1989
很是杯具     谢了啊!
2010-06-11 12:53
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
开数组的时候一定要注意哈~~看清是多大~~不然真的会找死你~~~嘿嘿··自己又不可能去测试那么大的数组量
2010-06-11 14:54
快速回复:Hdu上的一个题 ,总是wa,样例都过了。望各位多多相助!!!
数据加载中...
 
   



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

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