动态编程 - 最大和增加子序列

时间:2017-06-10 17:01:32

标签: algorithm python-3.x dynamic-programming

给定一组n个正整数。这是一个程序,用于查找给定数组的最大和子序列的总和,使得子序列中的整数按递增顺序排列。我正在尝试基于此YouTube video实现代码 我不知道我做错了什么。

 class MaxIncreasingSumSubSequence(object):
        def incsum(self,nums):
            maxvalue = 0
            sumlist = nums
            for i in range(1,len(nums)):
                for j in range(i):
                    if nums[j] < nums[i] and nums[i] + sumlist[j] > sumlist[i]:
                        sumlist[i] = nums[i] + sumlist[j]
            maxvalue = max(sumlist)
            print(maxvalue)

MaxIncreasingSumSubSequence().incsum([1, 101, 2, 3, 100, 4, 5])

2 个答案:

答案 0 :(得分:1)

在Python中,当您执行list1 = list2时,您不会获得两个列表。 list1成为list2的引用。基本上这两个变量引用相同的列表。

因此,将其更改为list1 = list2[:]值从一个列表复制到另一个列表。以下应该有效:

def incsum(nums):
    sumlist = nums[:]
    for i in range(1,len(nums)):
        for j in range(0,i):
            if nums[j] < nums[i] and nums[i] + sumlist[j] > sumlist[i]:
                sumlist[i] = nums[i] + sumlist[j]
    print(max(sumlist))

incsum([1, 101, 2, 3, 100, 4, 5])

答案 1 :(得分:0)

def fun(a):
    n=len(a)
    list_sum=[a[0]]
    max_val=a[0]
    for i in range(1,n):
        temp=a[i]
        j=i-1
        while j>-1:
            if a[j]<a[i]:
                if temp<a[i]+list_sum[j]:
                    temp=a[i]+list_sum[j]
                if list_sum[j]==max_val:
                    break

            j-=1
        list_sum.append(temp)
        if temp>max_val:
            max_val=temp

    return max_val
 fun(array)
相关问题