#1525. 任务调度优化师

任务调度优化师

故事背景

在一家软件公司中,项目经理需要安排程序员的工作任务。每个任务都有一个截止时间和完成后可以获得的收益。由于每个程序员同一时间只能处理一个任务,项目经理需要合理安排任务顺序,以最大化总收益。作为公司的算法专家,你需要设计一个高效的任务调度算法。

题目描述

给定一组任务,每个任务有一个截止时间 did_i 和完成后可以获得的收益 pip_i 。每个任务需要占用一个单位的时间来完成,并且只能在一个连续的时间区间内执行(即一旦开始执行,就必须完成)。

请你设计一个算法,选择一些任务进行调度,使得在不超过任何任务截止时间的前提下,最大化总收益。

输入格式

第一行输入一个整数 n ( 1n10001 \leq n \leq 1000 ),表示任务的数量。

接下来 n 行,每行输入两个整数 d_i 和 p_i ( 1di1000,1pi10001 \leq d_i \leq 1000, 1 \leq p_i \leq 1000 ),分别表示任务的截止时间和收益。

输出格式

输出一个整数,表示可以获得的最大总收益。

样例输入 1

4
2 100
1 19
2 27
1 25

样例输出 1

127

样例输入 2

5
3 10
1 5
2 15
3 20
2 10

样例输出 2

45

样例输入 3

3
1 100
2 200
3 300

样例输出 3

600

提示

  • 这是一个经典的任务调度问题,可以使用贪心算法解决
  • 考虑如何排序任务,以及如何选择最优的任务组合
  • 注意任务的截止时间和执行顺序的关系
  • 可以使用优先队列(堆)来辅助优化选择过程