文章

149

粉丝

195

获赞

0

访问

18.9k

头像
2025 年 10 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年11月29日 18:03
阅读数 10

1)

设计思想:
使用动态规划,维护以当前元素结尾且长度为奇数的最大交替和 even 和长度为偶数的最大交替和 odd,利用递推关系:

对于 even[i](以 A[i] 结尾,且 A[i] 符号为 +):

  • 可能只取 A[i] 自己(长度 1):A[i]

  • 可能接在某个以 A[i-1] 结尾、长度为偶数的子数组后面(这样加上 A[i] 后长度为奇数,且 A[i] 符号为 +):odd[i-1] + A[i]
    所以:

even[i]=max⁡(A[i], odd[i−1]+A[i])even[i]=max(A[i], odd[i−1]+A[i])

对于 odd[i](以 A[i] 结尾,且 A[i] 符号为 -):

  • 必须接在某个以 A[i-1] 结尾、长度为奇数的子数组后面(这样加上 A[i] 后长度为偶数,且 A[i] 符号为 -):even[i-1] - A[i]

  • 注意:不能单独取 A[i] 作为长度为偶数的子数组,因为长度 1 是奇数。
    所以:

odd[i]=even[i−1]−A[i]odd[i]=even[i−1]−A[i]


更新,最终结果取两者最大值。

2)

void calMaxAlternatingSum(int A[], int res[], int n) {
    if (n == 0) return;
    
    int even = A[0];  // 以当前元素结尾且长度为奇数的最大交替和
    int odd = -1e9;   // 以当前元素结尾且长度为偶数的最大交替和(初始不可达)
    
    res[0] = even;
    
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发