编程题

双子序列最大和)给定一个长度为n(3≤n≤1000)的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出这个最大和。一个连续子序列的序列和为该连续子序列中所有数之和。要求:每个连续子序列长度至少为1,且两个连续子序列之间至少间隔1个数。(第五空4分,其余 2.5分)

#include

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() {

\tcin >> n;

\tfor (i = 0; i < n; i )

\t\tcin >> x[i];

\tlmax[0] = x[0];

\tfor (i = 1; i < n; i )

\t\tif (lmax[i - 1] <= 0)

\t\t\tlmax[i] = x[i];

\t\telse

\t\t\tlmax[i] = lmax[i - 1] x[i];

\tfor (i = 1; i < n; i )

\t\tif (lmax[i] < lmax[i - 1])

\t\t\tlmax[i] = lmax[i - 1];

(1) ;

\tfor (i = n - 2; i >= 0; i--)

\t\tif (rmax[i 1] <= 0)

\t (2) ;

\t\telse

\t (3) ;

\tfor (i = n - 2; i >= 0; i--)

\t\tif (rmax[i] < rmax[i 1])

\t (4) ;

\tans = x[0] x[2];

\tfor (i = 1; i < n - 1; i ) {

\tsum = (5) ;

\tif (sum > ans)

\t\tans = sum;

\t}

\tcout << ans << endl;

\treturn 0;

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论