动态规划后效性示例代码:最长上升子序列
以下是一个有后效性的动态规划的例子的代码:
# 题目:给定一个数组 nums,找到其中最长的上升子序列的长度。
# 例如,给定 nums = [10, 9, 2, 5, 3, 7, 101, 18],最长的上升子序列是 [2, 3, 7, 101],长度为 4。
def lengthOfLIS(nums):
'''
:type nums: List[int]
:rtype: int
'''
if not nums:
return 0
n = len(nums)
dp = [1] * n
for i in range(1, 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(lengthOfLIS(nums)) # Output: 4
在这个例子中,我们使用动态规划来解决最长上升子序列问题。我们定义一个 dp 数组,其中 dp[i] 表示以 nums[i] 结尾的最长上升子序列的长度。然后,我们使用两层循环来遍历所有可能的子序列,并更新 dp 数组中的值。由于 dp[i] 可以由 dp[0], dp[1], ..., dp[i-1] 推导出来,因此此问题具有后效性。
原文地址: http://www.cveoy.top/t/topic/mAyO 著作权归作者所有。请勿转载和采集!