📅  最后修改于: 2023-12-03 15:40:13.888000             🧑  作者: Mango
给定一个整数数组 nums,以及一个整数 k,从数组的任意起始索引开始,最多允许跳 k 次,每次跳跃必须移动至相邻的元素,求所有可能的跳跃方案中,路径和的最大值。
本题可以使用动态规划求解。
定义一个二维数组 dp,其中 dp[i][j] 表示从索引 i 开始最多可以跳 j 次的情况下能得到的最大路径和。注意,由于本题要求从任意起始位置开始跳跃,因此需要对数组的所有位置进行遍历,并将每个位置作为起始位置。
状态转移方程为:
dp[i][j] = max(dp[i][j], dp[x][j-1] + nums[i])
其中 x 为 i 前面的所有位置,满足 i - x <= k。
最大路径和即为 dp 数组中的所有元素的最大值。
def max_path_sum(nums: List[int], k: int) -> int:
n = len(nums)
dp = [[float('-inf')] * (k + 1) for _ in range(n)]
# 初始化,从 i 开始跳 0 次只能到达自身,路径和即为 nums[i]
for i in range(n):
dp[i][0] = nums[i]
# 状态转移
for j in range(1, k + 1):
for i in range(n):
for x in range(max(0, i - k), i):
dp[i][j] = max(dp[i][j], dp[x][j-1] + nums[i])
# 返回最大路径和
return max([max(row) for row in dp])
复杂度分析: