最大连续子序列

给定一个整数序列(可能有正数,0和负数),求它的一个连续最大子序列乘积,如果乘积为负数,输出-1

样例输入:

3

 

 

 

2 4 -3

5

2 5 -1 2 -1

样例输出:

8

20

连续子序列有俩个要素,起点和终点,因此只需要枚举起点和终点即可,由于每个元素的绝对值不超过10,一共不超过18个元素,最大可能的成绩不会超过10^18,可以用long long存下。暴力枚举

 

 

/*
* 这个枚举,是沿着数组逐步向下走,依次相加,不排除负数的可能依次相加 
* 枚举出所有的情况 
*/ 
#include<stdio.h>
int main(){
    int n,s[18]={0},result[3000]={0},count=0,min;
    while(scanf("%d",&n)==1){
        for(int f=0;f<n;f++){
            scanf("%d",&s[f]);
        }
        //在数组中不断的枚举 
        for(int i=0;i<n;i++){
            result[count]=s[i];
            //不排除负数,一个一个向后加。 
            //找出所有可能性 
            for(int j=i+1;j<n;j++){
                count++;
                result[j]=result[j-1]+s[j];
            }
            count++;
        }
        //选择出数组中所有数的最小值 
        min=result[0];
        for(int x=1;x<count;x++){
            min=(min<result[x])?result[x]:min;
        }
        if(min<0)
            printf("-1\n");
        else 
            printf("%d\n",min);
    }
    return 0;
}

 

posted @ 2015-04-10 20:53  sky-zz  阅读(175)  评论(0编辑  收藏  举报