2013 - ECJTU 暑期训练赛第八场-problem-D

来源:互联网 发布:led显示屏软件下载 编辑:程序博客网 时间:2024/05/21 06:57
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
这题就是求2段最大子序列和
AC代码:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<iomanip>#include<cmath>#include<queue>#include<stack>#include<set>#include<map>#include<algorithm>const int MAX=100001;const int INF=99999999;int s[MAX];int DP[MAX];int Now[MAX];using namespace std;int Max(int x,int y){    return x>y?x:y;}int main(){    int n,i,j,sum;    while(cin>>n,n)    {        for(i=1;i<=n;i++)        {            cin>>s[i];        }        memset(DP,0,sizeof(DP));        memset(Now,0,sizeof(Now));        sum=0;        for(i=1;i<=2;i++)        {            sum=-INF;            for(j=i;j<=n-2+i;j++)            {                DP[j]=Max(DP[j-1]+s[j],Now[j-1]+s[j]);                Now[j-1]=sum;                sum=Max(DP[j],sum);            }            Now[n-2+i]=sum;        }        cout<<sum<<endl;    }    return 0;}


 

原创粉丝点击