假设我们有两个长度相同的数字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