用python编写 写作业问题 小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序,以便扣最少的分数。
时间: 2024-02-13 10:07:21 浏览: 63
这是一个经典的贪心算法问题,可以按照最小化每个任务的惩罚值来安排任务的顺序。具体来说,我们可以按照截止时间从小到大进行排序,然后依次安排任务,对于每个任务,我们尽可能地把它安排在截止时间之前完成,以最小化逾期惩罚值。
以下是 Python 代码实现:
```python
def homework_order(n: int, t: List[int], k: List[int]) -> List[int]:
# 将作业按照截止时间从小到大排序
homeworks = [(t[i], k[i], i) for i in range(n)]
homeworks.sort()
# 安排作业
order = []
end_time = 0
for t, k, i in homeworks:
if t > end_time:
end_time = t
order.append(i)
end_time -= 1
return order
# 示例
n = 3
t = [1, 3, 1]
k = [6, 2, 3]
print(homework_order(n, t, k)) # 输出 [0, 2, 1]
```
以上代码实现了按照最小化逾期惩罚值的贪心算法,并提供了一个示例测试用例。
阅读全文