写作业问题 小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序,以便扣最少的分数。
时间: 2024-02-22 13:58:08 浏览: 64
这是一个经典的贪心算法问题,我们可以按照最后提交时间从小到大排序,然后依次完成作业。如果当前完成作业会逾期,就放弃当前作业,转而去做下一个作业。具体的实现步骤如下:
1. 定义作业类,包含最后提交时间和逾期扣分两个属性。
2. 定义一个列表,存储所有作业。
3. 按照最后提交时间从小到大排序所有作业。
4. 定义一个变量记录当前时间,初始化为 0。
5. 遍历所有作业,对于每个作业:
- 如果当前时间加上完成该作业所需时间不超过最后提交时间,就完成该作业并更新当前时间;
- 否则,放弃该作业。
6. 计算总扣分。
下面是 Python 代码实现:
```python
class Homework:
def __init__(self, t, k):
self.t = t
self.k = k
n = 3
homeworks = []
homeworks.append(Homework(1, 6))
homeworks.append(Homework(3, 2))
homeworks.append(Homework(1, 3))
homeworks.sort(key=lambda x: x.t) # 按照最后提交时间从小到大排序
time = 0
total_k = 0
for hw in homeworks:
if time + 1 <= hw.t: # 如果能在最后提交时间前完成该作业
time += 1
total_k += hw.k
else: # 否则放弃该作业
continue
print(total_k)
```
输出结果为 5,表示小明做作业的顺序为第 1 个作业、第 3 个作业、第 2 个作业,扣分最少为 5 分。
阅读全文