假设我们有两个长度相同的数字nums0和nums1列表,另外两个值d作为距离,c作为成本。如果我们从nums0或nums1的索引0开始,并希望以任一列表的最终索引结束。现在,在每个回合中,我们可以选择切换到其他成本列表。然后,我们可以在最远的d距离处向前跳跃,其中降落在索引处的c成本就是该点的值。因此,我们必须找到完成任务所需的最低总成本。
所以,如果输入是nums0=[2,3,10,10,6]nums1=[10,10,4,5,100]d=2c=3,那么输出将是18,因为我们可以从2开始,然后切换到第二个列表到4,再次切换回第一个列表到6。因此,成本2+4+6=12,并转换两次,每个成本为3,所以总共是18。
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums0, nums1, dist, cost): switch = {0: nums0, 1: nums1} def search(idx, nums): if idx >= len(switch[nums]): return float("inf") if idx == len(switch[nums]) - 1: return switch[nums][-1] c = float("inf") for i in range(1, dist + 1): c = min(c, switch[nums][idx] + search(idx + i, nums)) c = min(c, switch[nums][idx] + cost + search(idx + i, int(not nums))) return c return min(search(0, 0), search(0, 1)) ob = Solution() nums0 = [2, 3, 10, 10, 6] nums1 = [10, 10, 4, 5, 100] d = 2 c = 3 print(ob.solve(nums0, nums1, d, c))
[2, 3, 10, 10, 6],[10, 10, 4, 5, 100], 2, 3
输出结果
18