Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N).
You should output S.
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 20 0
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; }