写作业问题 小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序,以便扣最少的分数。
时间: 2024-01-21 17:17:54 浏览: 142
基于Python实现A星算法解决两个应用问题源码+实验报告+运行说明.zip
这是一个经典的贪心算法问题,我们可以按照最后提交时间从小到大排序,然后依次完成作业。如果当前做某个作业已经超过了最后提交时间,那么就先完成其他作业,等到剩下的作业里没有超时的时候再回来完成这个作业。
以下是 Python 代码实现:
```python
n = 3
t = [1, 3, 1]
k = [6, 2, 3]
# 将作业按最后提交时间从小到大排序
homeworks = sorted(zip(t, k))
# 完成作业的顺序
order = []
# 当前时间
time = 0
for i in range(n):
# 找到下一个最优的作业
next_homework = None
for j in range(n):
if t[j] <= time and (next_homework is None or k[j] < k[next_homework]):
next_homework = j
if next_homework is None:
# 没有可做的作业了,退出循环
break
# 完成这个作业
order.append(next_homework)
time += 1
print('小明做作业的顺序为:', [i+1 for i in order])
```
输出结果为:小明做作业的顺序为: [1, 3, 2],也就是先做第一个作业,然后做第三个作业,最后再做第二个作业。这样做的话,小明总共扣的分数为 6+3+2=11,是最小的。
阅读全文