Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- public class GuardMark {
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new FileReader("guard.in"));
- PrintWriter pw = new PrintWriter(new File("guard.out"));
- int[] line = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
- int cows = line[0], height = line[1], res = 0;
- int[] h = new int[cows], w = new int[cows], s = new int[cows];
- boolean reached = false;
- for (int i = 0; i < cows; i ++) {
- line = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
- h[i] = line[0];
- w[i] = line[1];
- s[i] = line[2];
- }
- int[] dp = new int[1 << cows], hdp = new int[1 << cows];
- Arrays.fill(dp, Integer.MAX_VALUE);
- for (int i = 1; i < dp.length; i ++) {
- int best = 0;
- for (int j = 0; j < cows; j ++) {
- int m = 1 << j, q = i & m;
- if (q != 0 && Math.min(s[j], dp[i ^ m] - w[j]) > best) {
- best = Math.min(s[j], dp[i ^ m] - w[j]);
- hdp[i] = hdp[i ^ m] + h[j];
- }
- }
- dp[i] = best;
- if (hdp[i] >= height) {
- res = Math.max(res, dp[i]);
- reached = true;
- }
- }
- if (reached)
- pw.println(res);
- else
- pw.println("Mark is too tall");
- br.close();
- pw.close();
- System.exit(0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement