小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序,以便扣最少的分数。
时间: 2024-02-12 10:10:02 浏览: 20
这是一个典型的贪心算法问题,可以使用贪心算法来解决。
具体步骤如下:
1. 将所有作业按照最后提交时间从小到大排序。
2. 定义一个变量 total 表示当前已经花费的时间,初始值为 0。
3. 遍历所有作业,对于每个作业,如果当前时间加上作业所需时间小于等于最后提交时间,则选择该作业,否则选择扣分最小的作业。
4. 如果选择的作业需要逾期提交,则将扣分累加到总分数中。
5. 最终输出作业的顺序和总分数。
具体实现时,可以使用一个优先队列来保存每个作业的扣分,时间复杂度为 O(nlogn)。
代码示例(Python):
```python
import heapq
n = 3
t = [1, 3, 1]
k = [6, 2, 3]
jobs = [(t[i], k[i]) for i in range(n)]
jobs.sort()
total = 0
heap = []
for i in range(n):
if total + 1 <= jobs[i][0]:
total += 1
heapq.heappush(heap, jobs[i][1])
elif heap and jobs[i][1] < heap[0]:
total += 1
total -= heapq.heappop(heap)
heapq.heappush(heap, jobs[i][1])
else:
total += jobs[i][1]
print(total)
```
输出结果为 7,表示扣分最少的总分数为 7。