【问题标题】:What is the algorithm to find the maximum sum of an array sub-sequence?找到数组子序列的最大和的算法是什么?
【发布时间】:2019-05-19 18:58:05
【问题描述】:

有一个包含元素 {5,30,99,60,5,10} 的一维数组。 从这个数组中,1 个子序列是 5、99 和 10,它们的总和为 114。其他子序列的总和小于 114。 子序列中的两个元素不应该是连续的,即 {5, 30 和 60} 不是有效的子序列(对于这个问题)。它可以是 {5, 99, 5} 或 {30, 60, 10} 等。数组不包含负数。 什么方法是计算这个最大总和的正确方法?我正在尝试在 C 中实现它。

【问题讨论】:

  • 有一个算法,但很难解释。你可以阅读它here
  • @babaliaris 看起来该算法不满足序列不能由相邻列表项组成的约束。
  • @babaliaris 用于连续元素..
  • 你可以修改它来实现它们。这可能是一项艰巨的任务,但优化算法本身就很难。为了能够实现您正在尝试做的事情,您需要做很多工作。

标签: c data-structures


【解决方案1】:

递归是你的朋友

总和是最大值

5 + maxSum of {99, 60, 5, 10}

或丢弃 5 以支持 30 和

30 + maxSum of {60, 5, 10}

假设您没有任何负数,您应该使用530,然后使用剩余的序列。将它们都丢弃是没有意义的。

【讨论】:

    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2010-10-02
    • 2017-10-28
    相关资源
    最近更新 更多