动态规划(最长上升子序列LIS‘
时间: 2023-11-04 08:54:43 浏览: 185
动态规划设计:最长递增子序列.md
最长上升子序列(LIS)是一个问题,其目标是在给定序列中找到最长的严格递增的子序列。动态规划是解决该问题的一种常用方法。
动态规划解决LIS问题的一种常见方法是定义一个dp数组,其中dp[i]表示以第i个元素为结尾的LIS的长度。然后,我们可以通过迭代计算dp[i]来逐步构建解。
以下是一个动态规划解决LIS问题的示例代码:
```python
def lis(nums):
n = len(nums)
dp = [1] * n
for i in range(n):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)
# 示例输入
nums = [10, 9, 2, 5, 3, 7, 101, 18]
print(lis(nums)) # 输出: 4
```
在上述代码中,我们通过两层循环来计算dp数组的值。在每个位置i,我们将其与之前的每个位置j进行比较,如果nums[i]大于nums[j],则可以将nums[i]添加到以nums[j]结尾的递增子序列中,从而更新dp[i]的值。
阅读全文