def basic_lis(seq): l=[1]*len(seq) for cur ,val in enumerate(seq): #enumerate返回元素的"索引和值" for pre in range(cur): if seq[pre]<val: l[cur]=max(l[cur],1+l[pre]) return max(l) L=[49, 64, 17, 100, 86, 66, 78, 68, 87, 96, 19, 99, 35] print(basic_lis(L))
时间: 2024-03-24 07:41:36 浏览: 110
lis302.rar_LIS302 STM32_LIS302DL_lis302
这段代码实现的是最长上升子序列(Longest Increasing Subsequence,简称 LIS)的动态规划算法。在这段代码中,`l` 列表表示以当前元素为结尾的最长上升子序列的长度。`l[cur]` 的初始值为 1,表示当前元素本身构成一个长度为 1 的上升子序列。对于当前元素 `seq[cur]`,遍历它前面的所有元素 `seq[pre]`,如果 `seq[pre]` 小于 `seq[cur]`,说明可以将 `seq[cur]` 加入到以 `seq[pre]` 结尾的上升子序列中,得到一个更长的上升子序列。此时,以 `seq[cur]` 为结尾的最长上升子序列的长度为 `1+l[pre]`,需要将其与 `l[cur]` 取最大值,更新 `l[cur]`。最后,返回 `l` 列表中的最大值,即为整个序列的最长上升子序列的长度。完整代码如下:
```python
def basic_lis(seq):
l = [1] * len(seq)
for cur, val in enumerate(seq):
for pre in range(cur):
if seq[pre] < val:
l[cur] = max(l[cur], 1 + l[pre])
return max(l)
L = [49, 64, 17, 100, 86, 66, 78, 68, 87, 96, 19, 99, 35]
print(basic_lis(L))
```
输出结果为:`6`,表示序列 `L` 的最长上升子序列的长度为 6。
阅读全文