Python程式:查詢所有出行日期的最低公交票價?
假設我們有一個稱為days的已排序數字列表,其中包含我們必須在每一天乘坐公交車的日期。我們必須找到乘坐所有日期的最低成本。有三種類型的公交票。1日票價為2美元,7日票價為7美元,30日票價為25美元。
因此,如果輸入類似於 days = [1, 3, 5, 6, 28],則輸出將為 9,因為最低成本可以透過在開始時購買 7 日票,然後在第 29 天購買 1 日票來實現。
為了解決這個問題,我們將遵循以下步驟
n := days中的最大值
days := 從days建立的新集合
dp := [0] *(n + 1)
對於 i 從 1 到 n + 1,執行以下操作
如果 i 在 days 中存在,則
如果 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]
讓我們看看以下實現以獲得更好的理解
示例
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: if i >= 30: dp[i] = min(dp[i - 1] + 2, dp[i - 7] + 7, dp[i - 30] + 25) elif i >= 7: dp[i] = min(dp[i - 1] + 2, dp[i - 7] + 7, 25) else: dp[i] = min(dp[i - 1] + 2, 7) else: dp[i] = dp[i - 1] return dp[n] ob = Solution() days = [1, 3, 5, 6, 28] print(ob.solve(days))
輸入
[1, 3, 5, 6, 28]
輸出
9
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP