ACM乐园
Love Me,Love My Code!
posts - 53,  comments - 24,  trackbacks - 0
 http://acm.hdu.edu.cn/showproblem.php?pid=1231

求最大连续子序列,并记录首尾元素。
#include <iostream>

using namespace std;

int a[10000];

int main()
{
    
int k,i,temp,sum,begin,end,tb;
    
while(scanf("%d",&k),k)
    
{
        
for(i=0;i<k;i++)
            scanf(
"%d",&a[i]);
        temp
=begin=end=tb=0;
        sum
=-1;
        
for(i=0;i<k;i++)
        
{
            temp
+=a[i];
            
if(temp>sum)
            
{
                sum
=temp;
                end
=i;
                begin
=tb;
            }

            
if(temp<0)
            
{
                temp
=0;
                tb
=i+1;
            }

        }

        
if(sum==-1)   //若sum==-1,则输入数值全是负值
        
{
            sum
=0;
            begin
=0;
            end
=k-1;
        }

        printf(
"%d %d %d\n",sum,a[begin],a[end]);
    }

    
return 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
*/


posted on 2011-07-31 20:16 大大木马 阅读(237) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年7月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(1)

随笔档案(53)

文章档案(2)

搜索

  •  

积分与排名

  • 积分 - 63789
  • 排名 - 351

最新评论

阅读排行榜

评论排行榜