使用自下而上的方法安排任务编码问题

问题描述 投票:0回答:0

我有一份每项任务所需成本和时间的清单。我有两台服务器来运行这些作业,其中一台是付费的,另一台是免费的。要使用免费服务器,您必须在付费服务器上运行一项任务。付费服务器花费时间数组中提到的时间,而免费服务器可以在 1 个单位时间内运行任何任务。我必须找到在给定约束条件下运行所有作业的最低成本。

我的方法: 自上而下-

@cache
function dfs(job_idx, time_spent)
{
   if job_idx == n {
       if time_spent >= 0:  return 0
       else: return inf
   }
   return min(cost[job_idx]+dfs(job_idx+1, time_spent+time[job_idx]), dfs(job_idx+1, time_spent-1))
}
dfs(0, 0)

这是我使用 dfs 自上而下的方法,我遍历了所有可能的解决方案,将这项工作视为付费/免费,我试图使用自下而上的方法来解决它,但我无法思考我应该如何去做。我可以使用自上而下/自下而上的任何一种方法解决 dp 问题,但无法考虑如何将其中一种转换为另一种。因为我擅长 dfs,所以我可以使用自上而下的方法解决它,而对于自下而上的方法,我已经学会了一些采用这种方法的模式。模式的有用链接:https://leetcode.com/discuss/general-discussion/458695/dynamic-programming-patterns

这就是我在学习理解它所遵循的:

  1. 确定递归函数。

  2. 确定递归函数的基本情况

  3. 创建一个二维数组来保存子问题的结果。

  4. 填写数组的基本情况。这些是递归函数在到达基本情况时返回的值。

  5. 使用嵌套循环遍历节点或顶点以及子问题的状态。使用前面子问题的结果填充数组的剩余值。

  6. 返回子问题初始状态对应的结果

有人可以帮忙解释一下这两种方式吗?

algorithm recursion data-structures dynamic-programming
© www.soinside.com 2019 - 2024. All rights reserved.