用Python,输出给定数列的最长递增子序列的长度,写一下注释

问题遇到的现象和发生背景

给定一个由 nn个整数组成的序列 AA。找到最大的 k有一个索引序列 满足不等式a≤a2≤ak
例如,序列 A=(5 3 2 4 6 1) 具有最长的递增子序列 (3 4 6) 和 (2 4 6)

测试输入输出例子如图

img

数据输入例子解释
第一个输入行包含一个整数 n(1≤n≤2000),A中的元素个数。
第二个输入行包含 n 个整数 ai(1≤ai ≤1000)

数据输出解释
打印一个整数 k,即最长递增子序列的长度。

我想要达到的结果

用Python实现编写满足图片和任意的例子,输出打印一个整数 k,输出给定数列的最长递增子序列的长度
数据输入第一行使用 n= int(input())
第二行使用li = input().split()接收任意参数
最后输出打印满足任意条件的结果

那我来个优化的,动态规划的


def lengthOfLIS():
    n = eval(input())
    nums = list(map(int,input().split()))
    dp = [1 for _ in range(n)] # 动态转换数组
    max_length = 1 # 最短一个词长度为1不是0
    for i in range(1,n):
        for j in range(i):
            if nums[i]>nums[j]: # 代表遍历到当前为递增,可以加入
                dp[i] = max(dp[i],dp[j]+1) # 判断是之前的大,还是现在dp[j]加了1大
        max_length = max(dp[i], max_length) # 当前的长度的最大值和全局长度最大值比较
    print(max_length)

lengthOfLIS()
n= int(input())
li = input().split()

li = list(map(int,li))

res = []
for i in range(len(li)):
    res.append([li[i]])
    for j in range(i+1,len(li)):
        if li[j]>res[-1][-1]:
              res[-1].append(li[j])

#print(res) #查看所有递增子序列

print(max(len(i) for i in res))

学习