📅  最后修改于: 2023-12-03 15:09:19.915000             🧑  作者: Mango
本算法可以根据给定的完成任务时间以及每天的成本,计算出完成任务的最低成本。
本算法需要的参数列表如下:
days
: 完成任务所需的天数,取值范围为 1 到 365。costs
: 按 days
排序的成本列表,包含 days
天内每天的成本,取值范围为 1 到 10^9。本算法返回一个整数,表示完成任务的最低成本。
total_cost
为 0。days
的最小值开始遍历到最大值,依次计算以第 i 天为结束时间的最低成本。具体来说:dp[i]
为 0。curr_cost
,即前 j 天的最低成本加上剩余天数的成本乘积。curr_cost
小于当前 dp[i]
,则更新 dp[i]
。dp[i]
加入 total_cost
。total_cost
。本算法的时间复杂度为 O(n^2),其中 n 为 days
的取值范围。空间复杂度为 O(n)。
def min_cost(days: int, costs: List[int]) -> int:
dp = [0] * (days + 1)
total_cost = 0
for i in range(1, days + 1):
dp[i] = float('inf')
for j in range(i):
curr_cost = dp[j] + (days - i + 1) * costs[j]
dp[i] = min(dp[i], curr_cost)
total_cost += dp[i]
return total_cost