小 A 是一家游戏公司的程序员,他正在设计一款新的时间管理类游戏。
在游戏中,玩家需要在一系列的任务中选择部分或者所有任务,逐个完成。
每个任务都有截止时间和对应的奖励分数,完成每个任务需要消耗一个单位的时间。
如果当前时间未超过某任务的截止时间,玩家可以选择执行该任务。如果当前时间超过某任务的截止时间,该任务自动失效,无法选择执行该任务。
现给出某关卡中,N 个任务的奖励分数和截止时间。请编程计算出,在该关卡中,玩家最多可以获得多少奖励分数。
第一行,输入一个整数 N,表示任务的数量。
接下来 N 行,每行两个整数 V_i 和 T_i,分别表示第 i 个任务的奖励分数和截止时间。
输出一个整数,表示玩家最多可以获得的总分数。
5 12 4 7 4 8 1 2 1 3 3
30
10 4 4 2 1 2 8 1 2 10 5 10 3 9 5 10 1 3 7 8 4
52
30 52 82 24 14 75 41 20 91 79 51 65 87 25 34 5 14 1 21 53 57 82 21 34 80 17 25 25 44 82 31 55 85 49 42 17 29 94 54 21 15 93 77 43 17 62 29 76 37 93 58 78 3 59 84 41 44 34 3 23 16
1477
以下是得到样例 1 的最优解的策略。
因此,玩家共可以获得 8+3+12+7=30 分。
对于 10\% 的测试点,满足所有的 T_i 互不相等。
对于 30\% 的测试点,满足 1 \le N \le 3000。
对于 80\% 的测试点,满足 1 \le N \le 10000。
对于 100\% 的测试点,满足 1 \leq N \le 100000,1 \leq V_i \le 1000,1 \le T_i \leq 10000。