程序查找成本以达到Python中给定两个列表中任何一个的最终索引

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

范例(Python)

让我们看下面的实现以更好地理解-

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



猜你喜欢