以下是一个有后效性的动态规划的例子的代码:

# 题目:给定一个数组 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录