寻找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]
- 如果days中的i为非零,则
- 返回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