Python作业调度最大利润程序
假设我们有一组区间,每个区间包含三个值[开始时间,结束时间,利润]。我们一次只能执行一项任务,我们需要找到可以获得的最大利润。
因此,如果输入类似于intervals = [[1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]],则输出将为350,因为我们可以选择这两个区间[1, 2, 100]和[2, 100, 250]
为了解决这个问题,我们将遵循以下步骤
- d := 一个空映射,其值包含列表
- n := 0
- 对于intervals中的每个(start, end, profit),执行:
- 如果end > n,则
- n := end
- 如果end > n,则
- 将(start, end)对插入d[end]
- A := 一个大小为n + 1的列表,并用0填充
- 对于范围从0到A大小的end,执行:
- 如果end在d中,则
- 对于d[end]中的每个(start, profit)对,执行:
- A[end] := A[end],(A[start] + profit)和A[end - 1]中的最大值
- 对于d[end]中的每个(start, profit)对,执行:
- 否则,
- A[end] := A[end - 1]
- 如果end在d中,则
- 返回A的最后一个值
示例 (Python)
让我们看下面的实现,以便更好地理解:
from collections import defaultdict class Solution: def solve(self, intervals): d = defaultdict(list) n = 0 for start, end, profit in intervals: if end > n: n = end d[end].append([start, profit]) A = [0 for i in range(n + 1)] for end in range(len(A)): if end in d: for start, profit in d[end]: A[end] = max(A[end], A[start] + profit, A[end - 1]) else: A[end] = A[end - 1] return A[-1] ob = Solution() intervals = [[1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]] print(ob.solve(intervals))
输入
[[1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]]
输出
350
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP