import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int budget = sc.nextInt();
int typeNum = sc.nextInt();
int n = sc.nextInt();
HashMap<Integer, PriorityQueue<int[]>> components = new HashMap<>();
for (int i = 0; i < n; i++) {
int id = sc.nextInt();
int reliable = sc.nextInt();
int price = sc.nextInt();
components.putIfAbsent(id, new PriorityQueue<>((a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]));
components.get(id).offer(new int[]{reliable, price});
}
System.out.println(get(budget, typeNum, components));
}
private static int get(int budget, int typeNum, HashMap<Integer, PriorityQueue<int[]>> components) {
int priceSum = 0;
int minReliable = Integer.MAX_VALUE;
PriorityQueue<int[]> choice = new PriorityQueue<>((a, b) -> a[1] != b[1] ? a[1] - b[1] : a[2] - b[2]);
for (Integer id : components.keySet()) {
PriorityQueue<int[]> queue = components.get(id);
if (!queue.isEmpty()){
int[] poll = queue.poll();
choice.offer(new int[]{id, poll[0], poll[1]});
priceSum += poll[1];
minReliable = Math.min(minReliable, poll[0]);
}
}
if (choice.isEmpty() || choice.size() < typeNum || priceSum > budget) return -1;
while (priceSum < budget){
int[] poll = choice.poll();
int id = poll[0];
int re = poll[1];
int pr = poll[2];
minReliable = Math.max(minReliable, re);
if (!components.get(id).isEmpty()){
int[] high = components.get(id).poll();
int hRe = high[0];
int hPr = high[1];
choice.offer(new int[]{id, hRe, hPr});
priceSum += hPr - pr;
}else {
return minReliable;
}
}
return minReliable;
}
}
AssembleReliableDevice
最新推荐文章于 2024-09-25 11:06:23 发布