Algorithm 寻找最赚钱的工作

Algorithm 寻找最赚钱的工作,algorithm,sorting,Algorithm,Sorting,假设你是一名自由职业者承包商,一次只接受一份合同,想出一个算法,从以下列表中选择最赚钱的非重叠工作: potential_contract_jobs = [ { "start_day": 1, "end_day": 5, "profit": 100 }, { "start_day": 5, "end_day": 6, "profit": 10 }, { "start_day": 15, "end_day": 20

假设你是一名自由职业者承包商,一次只接受一份合同,想出一个算法,从以下列表中选择最赚钱的非重叠工作:

potential_contract_jobs = [
  {
    "start_day": 1,
    "end_day": 5,
    "profit": 100
  },
  {
    "start_day": 5,
    "end_day": 6,
    "profit": 10
  },
  {
    "start_day": 15,
    "end_day": 20,
    "profit": 500
  },
  {
    "start_day": 10,
    "end_day": 10,
    "profit": 150
  },
  {
    "start_day": 9,
    "end_day": 12,
    "profit": 20
  },
  {
    "start_day": 11,
    "end_day": 12,
    "profit": 796
  }
]
其他信息:

我看到一个关于这个问题的帖子,它是一个潜在的面试问题,我认为这是一个很棒的问题,但它完全把我难住了

我尝试过(但失败了)的方法与此类似:

  • 迭代列表并自动选择任何不重叠的作业
  • 按利润对有重叠的工作列表进行排序
  • 按照盈利能力的顺序开始接受它们
  • 如果你认为在给定的时间范围内,多份工作可能比做一份长的工作更有利可图,那么这就失败了

    我很想找到一个解决方案,即使是伪代码


    谢谢你

    因为只有6份工作,你有2^6种工作选择的可能性。 只是列举一下是可行的。 然后检查它是否有效,并取最大值


    或者,您可以按每天结束时进行排序,并创建一个递归算法,其中最大值由获得利润并占用一段时间或不接受工作的最大值确定。

    对于仅6个工作,您有2^6个工作选择的可能性。 只是列举一下是可行的。 然后检查它是否有效,并取最大值


    或者,你可以按每天结束时进行排序,并创建一个递归算法,其中最大值取决于接受有利润的工作并被占用一段时间或不接受该工作的最大值。

    我建议从这里开始@maks:这个问题与此完全不同。在job shop scheduling中,任务可以并行运行,所有任务都必须完成,虽然作业具有固定的长度,但它们不必在固定的时间进行。上面的链接不会直接回答您的问题。它为您提供了一条线索,您如何将该文章中的想法结合起来以解决您的问题problem@maks你能删除你最初的评论吗?这不是一个答案,只是增加了困惑。非常感谢。我建议从这里开始@maks:这个问题与这个问题完全不同。在job shop scheduling中,任务可以并行运行,所有任务都必须完成,虽然作业具有固定的长度,但它们不必在固定的时间进行。上面的链接不会直接回答您的问题。它为您提供了一条线索,您如何将该文章中的想法结合起来以解决您的问题problem@maks你能删除你最初的评论吗?这不是一个答案,只是增加了困惑。非常感谢。