找出有效的Python学习方法的程序

假设我们有三个长度相同的列表。这些是截止日期,积分和期限。他们代表课程作业。对于第i个作业,截止日期[i]显示其截止日期,积分[i]显示其积分,持续时间[i]显示完成任务所需的天数。必须先完成一项作业,然后再开始另一项作业。我们必须牢记,我们可以在到期日完成任务,而目前我们处于第0天的开始。

因此,如果输入为:截止日期= [7,5,10],积分= [8,7,10],持续时间= [5,4,10],则输出将为10。

为了解决这个问题,我们将遵循以下步骤-

  • 工作:=对列表进行排序 zip(deadlines, durations, credits)

  • 定义一个功能dp()。

    • 如果我> =工作规模,则

    • 返回0

  • ans:= dp(i + 1,天)

  • 期限,期限,信用:=工作[i]

  • 如果天+持续时间− 1 <=截止日期,则

    • ans:= ans的最大值,dp(i + 1,天+持续时间)+信用

  • 返回ans

  • 从主方法返回dp(0,0)

让我们看下面的实现以更好地理解-

示例

class Solution:
   def solve(self, deadlines, credits, durations):
      jobs = sorted(zip(deadlines, durations, credits))
      def dp(i=0, day=0):
         if i >= len(jobs):
            return 0
         ans = dp(i + 1, day)
         deadline, duration, credit = jobs[i]
         if day + duration − 1 <= deadline:
            ans = max(ans, dp(i + 1, day + duration) + credit)
      return ans
return dp()
ob = Solution()
deadlines = [7, 5, 10]
credits = [8, 7, 10]
durations = [5, 4, 10]
print(ob.solve(deadlines, credits, durations))

输入值

[7, 5, 10], [8, 7, 10], [5, 4, 10]
输出结果
10