通过python用贪心算法完成写作业问题 小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序,以便扣最少的分数。
时间: 2024-02-22 11:58:03 浏览: 96
贪心算法python实现
好的,这个问题也可以使用贪心算法来求解。
我们可以按照最后提交时间从小到大排序,然后依次考虑每个作业是否做或不做。具体的贪心策略是,将所有作业按照最后提交时间从小到大排序,然后依次考虑每个作业,尽可能地在最后提交时间之前完成作业,如果不能在最后提交时间之前完成,则不做此作业。
具体实现如下:
```python
def homework(n, t, k):
# 将作业按照最后提交时间从小到大排序
jobs = sorted(zip(t, k))
# 初始化总扣分和已花时间
total_penalty = 0
time = 0
# 依次考虑每个作业
for job in jobs:
# 如果还能在最后提交时间之前完成,则做此作业
if time + 1 <= job[0]:
total_penalty += job[1]
time += 1
return total_penalty
```
这个贪心算法的时间复杂度为$O(nlogn)$。
阅读全文