本文共 1124 字,大约阅读时间需要 3 分钟。
//package hd2037;import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;public class Main { public static void main(String[] args) { ArrayListlist; Scanner in = new Scanner(System.in); int n; while((n = in.nextInt())!= 0) { list = new ArrayList<>();//每次新new一个 防止忘记 清空list而导致错误 for(int i = 0; i < n; i++ ) { int st = in.nextInt(); int end = in.nextInt(); list.add(new T(st, end)); } //按照时间排序当然是越早结束越好 Collections.sort(list); int ans = 1; T temp = list.get(0); for(int i = 1; i < list.size(); i++ ) { if(temp.end <= list.get(i).start) { ans++; temp = list.get(i); } } System.out.println(ans);// for(T node:list) {// System.out.print(node.end+" ");// } } }}class T implements Comparable { int start, end; public T(int st, int end) { start = st; this.end = end; } @Override public int compareTo(T o1) { if(this.end > o1.end) return 1; else if(this.end == o1.end) { if(this.start > o1.start) return 1; else return -1; } else return -1; } }
正确性的原理: 每次在在考虑当前时间时候后考虑节目时间最短的(也就是最早结束的),基于此易得这样 易得 可得全局最优解
转载地址:http://goimi.baihongyu.com/