Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最大和递增子序列(但输出为列表)_Python_Algorithm_Data Structures - Fatal编程技术网

Python 最大和递增子序列(但输出为列表)

Python 最大和递增子序列(但输出为列表),python,algorithm,data-structures,Python,Algorithm,Data Structures,编写一个递归程序,查找组成给定数组最大和子序列和的元素列表,以便子序列中的整数按递增顺序排序 例如,如果输入是{1,101,2,3,100,4,5},那么输出应该是[1,2,3100](1+2+3+100是最高和) 我尝试过这个,但我认为它根本没有帮助(我还没有得到动态编程,我认为这段代码对我的问题没有帮助) 您可以构建一个升序序列列表(即列表列表列表),然后使用max()获得总和最大的序列: A = [1, 101, 2, 3, 100, 4, 5] series = [A[:1]] for

编写一个递归程序,查找组成给定数组最大和子序列和的元素列表,以便子序列中的整数按递增顺序排序

例如,如果输入是
{1,101,2,3,100,4,5}
,那么输出应该是
[1,2,3100]
(1+2+3+100是最高和)

我尝试过这个,但我认为它根本没有帮助(我还没有得到动态编程,我认为这段代码对我的问题没有帮助)


您可以构建一个升序序列列表(即列表列表列表),然后使用max()获得总和最大的序列:

A = [1, 101, 2, 3, 100, 4, 5]

series = [A[:1]]
for a in A[1:]:
    more = [s+[a] for s in series if s[-1]<=a] # add series where ascending
    series.extend([[a]]+more)                  # each value starts a new series

result = max(series,key=sum)
print(result)
# [1, 2, 3, 100]
A=[1,101,2,3,100,4,5]
系列=[A[:1]]
对于a[1:]中的a:

如果s[-1],则s系列中的s更多=[s+[a]到目前为止,您尝试了什么?这是我们的任务吗?很好。我们将得到什么?请向我们展示您尝试了什么,以便我们可以帮助您修复代码。我们不是来完成您的家庭作业,但我们准备帮助您解决问题。如果您当时无法解决问题,一个简单的web搜索问题可以为您提供教程和解决方案我根本不知道如何解决这个问题,因为我还没有真正了解动态规划,所以我不知道如何解决这个问题,我想有人可以帮助我。它确实有效。但是,它创建了太多的
中间
子列表用于最终比较,以获得
max
一个。(似乎还有改进的余地?)例如,对于12个数字列表-这将创建527个子列表。
A = [1, 101, 2, 3, 100, 4, 5]

series = [A[:1]]
for a in A[1:]:
    more = [s+[a] for s in series if s[-1]<=a] # add series where ascending
    series.extend([[a]]+more)                  # each value starts a new series

result = max(series,key=sum)
print(result)
# [1, 2, 3, 100]
def maxAscendingSum(A):
    if len(A)<2: return A
    skipping  = maxAscendingSum(A[1:])
    using     = A[:1] + maxAscendingSum([a for a in A[1:] if a>A[0]])
    return max((skipping,using),key=sum)
def maxAscendingSum(A,memo=None):
    if len(A)<2: return A
    if memo is None: memo = dict()
    key = tuple(A)
    if key not in memo:
        skipping  = maxAscendingSum(A[1:],memo)
        using     = A[:1] + maxAscendingSum([a for a in A[1:] if a>A[0]],memo)
        memo[key] =  max((skipping,using),key=sum)
    return memo[key]