执行任务赚积分
题目描述
现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。
每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。
可用于处理任务的时间有限,请问在有限的时间内,可获得的最多积分。
输入描述
第一行为一个数 N,表示有 N 个任务
1≤N≤100
第二行为一个数T,表示可用于处理任务的时间
1≤T≤100
接下来 N 行,每行两个空格分隔的整数(SLA和 V),SLA 表示任务的最晚处理时间,V表示任务对应的积分。
1≤SLA≤100
0≤V≤100000
输出描述
可获得的最多积分
public class 执行任务赚积分 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int t = sc.nextInt();List[] lists = new List[t + 1];for (int i = 0; i < t+1 ; i++) {lists[i] = new ArrayList();}for (int i = 0; i <= n; i++) {int endtime = sc.nextInt();int value = sc.nextInt();lists[Math.min(endtime,t)].add(value);}int sum = 0;ArrayList<Integer> wait = new ArrayList<>();for (int i = t; i > 0 ; i--) {wait.addAll(lists[i]);if (!wait.isEmpty()){wait.sort(Comparator.comparingInt(o -> o));sum += wait.remove(wait.size()-1);}}System.out.println(sum);}
}