用python贪心算法写一个写作业问题 小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序和扣的最少分数
时间: 2024-02-28 13:53:44 浏览: 28
关于排课系统的贪心算法
4星 · 用户满意度95%
很抱歉,我之前的回答有误,只考虑了最后提交时间的排序,没有考虑到在同一最后提交时间的情况下应该优先完成逾期扣分少的作业。下面是修改后的代码,考虑了逾期扣分这一因素:
```python
def homework(n, t, k):
"""
:param n: 作业数量
:param t: 最后提交时间列表
:param k: 逾期扣分列表
"""
# 按照最后提交时间从小到大排序,如果最后提交时间相同则按逾期扣分从小到大排序
sorted_homework = sorted(zip(t, k, range(n)))
# 已完成作业数量
finished = 0
# 总扣分
total_penalty = 0
# 遍历每个作业
for deadline, penalty, index in sorted_homework:
if finished < deadline:
# 在最后提交时间之前完成作业,不扣分
finished += 1
total_penalty += penalty
return total_penalty
# 示例
n = 3
t = [1, 3, 1]
k = [6, 2, 3]
print(homework(n, t, k)) # 输出 5
```
在这个示例中,最优的做作业顺序是先完成第1个和第3个作业,再完成第2个作业,总共扣分为5分。
阅读全文