20220321 简单的动态规划示例

阅读 29

2022-03-21

题目:给定一个无序数组[1, 5, 2, 4, 3],找出最长的递增子序列,返回其长度。

思路:L(i)表示 i 之后的数字中存在的最长子序列的长度
L(1)=max{L(2), L(3), L(4), L(5)}
L(2)=max{L(3), L(4), L(5)}
L(3)=max{L(4), L(5)}
L(4)=max{L(5)}
L(5)=0

程序:

def length_of_LIS(nums):
    n=len(nums) # 5
    L=[1] * n # initial value: $[1,1,1,1,1]$

    for i in reversed(range(n)): # i -> 4,3,2,1,0
        for j in range(i+1, n):
            if nums [j]> nums[i]: # is increasing seq
                L[i] = max (L[i], L[j]+1)

    return max(L)

if __name__ == '__main__':
    nums = [1,5,2,4,3]
    length = length_of_LIS(nums)
    print(length)

精彩评论(0)

0 0 举报