组合题5 个小题
已作答 0 / 5
(双子序列最大和)给定一个长度为 n(3≤n≤1000) 的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出这个最大和。一个连续子序列的序列和为该连续子序列中所有数之和。要求:每个连续子序列长度至少为 1,且两个连续子序列之间至少间隔 1 个数。(第五空 4 分,其余 2.5 分)
1#include <iostream>2using namespace std;3const int MAXN = 1000;4int n, i, ans, sum;5int x[MAXN];6int lmax[MAXN]; // lmax[i]为仅含 x[i]及 x[i]左侧整数的连续子序列的序列和中,最大的序列和7int rmax[MAXN]; // rmax[i]为仅含 x[i]及 x[i]右侧整数的连续子序列的序列和中,最大的序列和8int main() {9 cin >> n;10 for (i = 0; i < n; i++)11 cin >> x[i];12 lmax[0] = x[0];13 for (i = 1; i < n; i++)14 if (lmax[i - 1] <= 0)15 lmax[i] = x[i];16 else17 lmax[i] = lmax[i - 1] + x[i];18 for (i = 1; i < n; i++)19 if (lmax[i] < lmax[i - 1])20 lmax[i] = lmax[i - 1];21 (1) ;22 for (i = n - 2; i >= 0; i--)23 if (rmax[i + 1] <= 0)24 (2) ;25 else26 (3) ;27 for (i = n - 2; i >= 0; i--)28 if (rmax[i] < rmax[i + 1])29 (4) ;30 ans = x[0] + x[2];31 for (i = 1; i < n - 1; i++) {32 sum = (5) ;33 if (sum > ans)34 ans = sum;35 }36 cout << ans << endl;37 return 0;38}第 4 空应填( )