寻找Python中所有日的最小公交车费用的程序?

寻找Python中所有日的最小公交车费用的程序?

我们有一个名为days的排序过的数字列表,在每天乘坐公交车时必须乘坐公交车。我们必须找到旅行所有天所需的最低费用。有3种公交车票。 2美元的1日通行证 7美元的7日通行证 25美元的30日通行证

因此,如果输入为days = [1, 3, 5, 6, 28],则输出将为9,因为最低费用可以通过在开始时购买7天通行证,然后在第29天购买1天通行证来实现。

为了解决这个问题,我们将遵循以下步骤:

  • n:= days中的最大值

  • days:=从days创建一个新集

  • dp := [0] *(n + 1)

  • 对于1到n + 1的范围内的i,执行以下操作

    • 如果days中的i为非零,则
      • 如果i> = 30,则

      • dp [i]: = dp [i-1] + 2,dp [i-7] + 7,dp [i-30] + 25中的最小值

      • 否则,当i> = 7时,

      • dp [i]: = dp [i-1] + 2,dp [i-7] +7,25中的最小值

      • 否则,

      • dp [i]: = dp [i-1] +2,7中的最小值

    • 否则,

      • dp [i]: = dp [i-1]
  • 返回dp [n]

让我们看下面的实现以获得更好的理解:

更多Python相关文章,请阅读:Python 教程

示例

class Solution:
   def solve(self, days):
      n = max(days)
      days = set(days)
      dp = [0] *(n + 1)
      for i in range(1, n + 1):
         if i in days:
            如果i> = 30:
          dp [i] = min(dp [i-1] + 2,dp [i-7] + 7,dp [i-30] + 25)
            else i>= 7:
          dp [i] = min(dp [i-1] + 2,dp [i-7] + 7,25)
            else:
          dp [i] = min(dp [i-1] +2,7)
         否则:
          dp [i] = dp [i-1]
      返回dp [n]

  
ob = Solution()
days = [1, 3, 5, 6, 28]
print(ob.solve(days))

输入

[1, 3, 5, 6, 28]

产量

9

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程