本文共 1694 字,大约阅读时间需要 5 分钟。
要点:主要就是排序 可以按照长度 或者 宽度 都可以,这样正确性是因为(以长度排序)当按照长度升序时,若此时宽度也按升序必然正确,但是若此时宽度小于之前的木头,那么这个必然不能和之前的木头用同种器材处理,例如 (2, 5)(4, 7)(6,3) 此时(6, 3)中 3 比较小所以不可能与前面的(2, 5)(4, 7)用同种器械。
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Scanner;public class Main { ArrayListlist; public static void main(String[] args) { new Main().run(); } public void run() { Scanner in = new Scanner(System.in); int t = in.nextInt(); while(t-- > 0) { list = new ArrayList<>(); int n = in.nextInt(); int x, y; for(int i = 0; i < n; i++ ) { x = in.nextInt(); y = in.nextInt(); list.add(new Node(x, y)); } Collections.sort(list); int cnt = 0; for(int i = 0; i < list.size(); i++ ) { Node node = list.get(i); if(!node.flag) { cnt++; node.flag = true; for(int j = i+1; j < list.size(); j++ ) { Node tmp = list.get(j); if(node.x <= tmp.x && node.y <= tmp.y && tmp.flag == false) {//标记不可少 node.x = tmp.x;//这两句很重要 (1, 2)(2, 5)(3, 4); 如果没这两句 也被视为一样的 node.y = tmp.y;//其实是错误的 tmp.flag = true; } } } } System.out.println(cnt); // for(Node s:list) {// System.out.println("("+s.x+", "+s.y+")");// } } }}class Node implements Comparable { int x, y; boolean flag; public Node(int x, int y){ this.x = x; this.y = y; flag = false; } @Override public int compareTo(Node o) {//按照长度优先或者宽度优先 都可以 //@1 // if(y > o.y)// return 1;// else if(y == o.y)// return (x > o.x) ? 1:-1;// else {// return -1;// } //@2宽度优先 if(y == o.y) return (x > o.x) ? 1 : -1; return (y > o.y) ? 1 : -1; //@长度优先// if(x == o.x)// return (y > o.y) ? 1:-1;// return (x > o.x) ? 1 : -1; }}
转载地址:http://wlimi.baihongyu.com/