import java.util.*;
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) -> b[0] - a[0]));
components.get(id).add(new int[]{reliable, price});
}
System.out.println(get(budget, components));
}
private static int get(int budget, HashMap<Integer, PriorityQueue<int[]>> components) {
ArrayList<Integer> res = new ArrayList<>();
dfs(0, components, new LinkedList<>(), res, budget);
if (res.isEmpty()) return -1;
return res.stream().mapToInt(Integer::intValue).max().getAsInt();
}
static void dfs(int index, HashMap<Integer,
PriorityQueue<int[]>> components,
LinkedList<int[]> path,
ArrayList<Integer> res,
int limit){
if (index == components.size()){
int sum = path.stream().mapToInt(a -> a[1]).sum();
if (sum <= limit){
int min = path.stream().mapToInt(a -> a[0]).min().getAsInt();
res.add(min);
}
return;
}
for (int[] arr : components.get(index)) {
path.add(arr);
dfs(index + 1, components, path, res, limit);
path.removeLast();
}
}
}
AssembleReliableDevice
最新推荐文章于 2024-09-27 00:45:01 发布