ACMjava经典贪心区间问题,区间选点,不相交区间,区间覆盖

package com.supermars.practice;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class 贪心法区间选点问题 {
    static Ac2 ac[] = new Ac2[1 << 10];
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int case_ = 1;
        while (cin.hasNext()) {
            int n = cin.nextInt();
            for (int i = 0; i < n; i++) {
                int a = cin.nextInt();
                int b = cin.nextInt();
                if (a > b) {
                    int t = a;
                    a = b;
                    b = t;
                }
                ac[i] = new Ac2(a, b);
            }

            int cnt = 1;

            Arrays.sort(ac, 0, n, new cmp2());
            int ok = ac[0].end;
            for (int i = 1; i < n; i++) {
                   if(ok<ac[i].begin){
                       cnt++;
                       ok=ac[i-1].end;
                   }
            }
            
            System.out.println("Case " + (case_++) + ":");
            System.out.println(cnt + ".");
        }
    }
}
class Ac2 {
    int begin;
    int end;
    Ac2(int begin, int end) {
        this.begin = begin;
        this.end = end;
    }
}
class cmp2 implements Comparator<Ac2> {
    @Override
    public int compare(Ac2 a, Ac2 b) {
        int t=a.end-b.end;
        if(t==0) t=b.begin-a.begin;
        return t;
    }

}


-----------------

package com.supermars.practice;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class 贪心法选择不相交区间 {
    static Ac ac[] = new Ac[1 << 10];
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int case_ = 1;
        while (cin.hasNext()) {
            int n = cin.nextInt();
            for (int i = 0; i < n; i++) {
                int a = cin.nextInt();
                int b = cin.nextInt();
                if (a > b) {
                    int t = a;
                    a = b;
                    b = t;
                }
                ac[i] = new Ac(a, b);
            }

            int cnt = 1;

            Arrays.sort(ac, 0, n, new cmp());
            int end = ac[0].end;
            for (int i = 1; i < n; i++) {
                   if(end<ac[i].begin){
                       cnt++;
                       end=ac[i].end;
                   }
            }
            
            System.out.println("Case " + (case_++) + ":");
            System.out.println(cnt + ".");
        }
    }
}
class Ac {
    int begin;
    int end;
    Ac(int begin, int end) {
        this.begin = begin;
        this.end = end;
    }
}
class cmp implements Comparator<Ac> {
    @Override
    public int compare(Ac a, Ac b) {
        return a.end-b.end;
    }
}



你可能感兴趣的:(java,算法,ACM)