,使用贪心算法解决,并用python实现添加备注.小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序,以便扣最少的分数。
时间: 2024-02-12 10:09:37 浏览: 63
这是一个经典的贪心算法问题——作业调度问题。我们可以按照最后提交时间从小到大排序,然后依次安排作业即可。
具体实现如下(Python代码):
```python
while True:
n = int(input("请输入作业数量:"))
if n == 0:
break
t = list(map(int, input("请输入每个作业的最后提交时间:").split()))
k = list(map(int, input("请输入每个作业的逾期扣分:").split()))
homework = list(zip(t, k, range(1, n+1))) # 将作业信息打包成元组列表
homework.sort() # 按最后提交时间从小到大排序
total_penalty = 0 # 记录总扣分
schedule = [] # 记录作业的安排顺序
for h in homework:
total_penalty += h[1] * (len(schedule) + 1) # 计算当前作业的扣分
schedule.append(h[2]) # 记录当前作业的安排顺序
print("最少扣分为:{}, 作业安排顺序为:{}".format(total_penalty, schedule))
```
运行示例:
```
请输入作业数量:3
请输入每个作业的最后提交时间:1 3 1
请输入每个作业的逾期扣分:6 2 3
最少扣分为:15, 作业安排顺序为:[1, 3, 2]
请输入作业数量:0
```
阅读全文