Max Sequence

来源:互联网 发布:算法研究员是做什么 编辑:程序博客网 时间:2024/05/29 16:31
Max Sequence
Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 17994 Accepted: 7522

Description

Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N). 

You should output S. 

Input

The input will consist of several test cases. For each test case, one integer N (2 <= N <= 100000) is given in the first line. Second line contains N integers. The input is terminated by a single line with N = 0.

Output

For each test of the input, print a line containing S.

Sample Input

5-5 9 -5 11 200

Sample Output

40
#include <iostream>#include<stdio.h>#include<math.h>#include<algorithm>#include<queue>#include<string.h>#define max(a,b) a>b?a:busing namespace std;int main(){    int n;    while(~scanf("%d",&n),n)    {        int a[100005],dp[100005];        int i,j,sum=0,ans,temp=-99999999;        for(i=0;i<n;i++)            scanf("%d",&a[i]);        for(i=0;i<n;i++)//从前往后找区间的最大值        {            sum+=a[i];            if(sum>temp)                temp=sum;            dp[i]=temp;            if(sum<0)                sum=0;        }        sum=0,ans=-99999999,temp=-99999999;        for(i=n-1;i>0;i--)//倒序查找        {            sum+=a[i];            if(sum>temp)                temp=sum;            if(ans<dp[i-1]+temp)                ans=dp[i-1]+temp;            if(sum<0)                sum=0;        }        printf("%d\n",ans);    }    return 0;}
 
原创粉丝点击