核心思路
用邻接表存放同一个开始时间下的所有任务的积分。
从小到大遍历每一个开始时间,对每一个开始时间下的任务积分倒序排序,取出最大的积分累加。
当任务次数达到上限就退出循环,或者遍历了所有任务的开始时间都没有对应的积分列表,就退出。
算法设计流程
用邻接表存放同一个开始时间下的所有任务的积分。
从小到大遍历每一个开始时间,对每一个开始时间下的任务积分倒序排序,取出最大的积分累加。
当任务次数达到上限就退出循环,或者遍历了所有任务的开始时间都没有对应的积分列表,就退出。
代码细节
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static List<Integer>[] list=new List[1000];
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int N= scanner.nextInt();
int T= scanner.nextInt();
scanner.nextLine();
for (int i = 0; i < 1000; i++) {
list[i]=new ArrayList<>();
}//初始化链表数组
for (int i = 0; i < N; i++) {
String[] str=scanner.nextLine().split(" ");
int[] num=new int[str.length];
for (int j = 0; j < str.length; j++) {
num[j]=Integer.parseInt(str[j]);
}
list[num[0]].add(num[1]);
}
int res=0;
int l=0;
while (T>0){
if (list[l].isEmpty()){
l++;
if (l==list.length-1){
break;
}
}else {
list[l].sort((o1,o2)->o2-o1);
res+=list[l].getFirst();
l++;
T--;
}
}
System.out.println(res);
}
}