不是VIP会员,不能显示答案

题目解答

题目:
(双子序列最大和)给定一个长度为n(3 ≤ n ≤ 1000 )的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出这个最大和。一个连续子序列的序列和为该连续子序列中所有数之和。要求:每个连续子序列长度至少为1,且两个连续子序列之间至少间隔1 个数。(第五空4分,其余2.5分)
#include <iostream>
using namespace std;
const int MAXN = 1000;
int n, i, ans, sum;
int x[MAXN];
int lmax[MAXN]; 
// lmax[i]为仅含x[i]及x[i]左侧整数的连续子序列的序列和中,最大的序列和
int rmax[MAXN]; 
// rmax[i]为仅含x[i]及x[i]右侧整数的连续子序列的序列和中,最大的序列和
int main() {
    cin >> n; 
   for (i = 0; i < n; i++)
        cin >> x[i]; 
   lmax[0] = x[0]; 
   for (i = 1; i < n; i++)
        if (lmax[i - 1] <= 0)
            lmax[i] = x[i];
        else 
           lmax[i] = lmax[i - 1] + x[i];
    for (i = 1; i < n; i++) 
       if (lmax[i] < lmax[i - 1])
            lmax[i] = lmax[i - 1];
        rmax[n-1]=x[n-1]   ; 
   for (i = n - 2; i >= 0; i--)
        if (rmax[i + 1] <= 0)
            rmax[i]=x[i]   ;    
        else 
            rmax[i]=rmax[i+1]+x[i]   ;            
   for (i = n - 2; i >= 0; i--)
        if (rmax[i] < rmax[i + 1])
             rmax[i]=rmax[i+1]   ;   
   ans = x[0] + x[2]; 
   for (i = 1; i < n - 1; i++) {
        sum = lmax[i-1]+rmax[i+1]   ;      
      if (sum > ans)
            ans = sum;
    } 
   cout << ans << endl;
    return 0;
} 
考点:
分析:
解答:
评论:
老师: