目标
在所给的活动集合中选出一个最大的相容活动子集和。
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源(如一个阶梯教室等),而在
同一时间内只有一个活动能使用这一资源。
1、每个活动i都有一个要求使用该资源的起始时间startTime和一个结束时间endTime,
且0<=startTime < endTime。
2、如果选择了活动i,则它在半开时间区间[startTime, endTime)内占用资源。
3、若区间[[startTimei, endTimei)与区间[[startTimej, endTimej)不相交,则称活动i与
活动j是相容的。
也就是说,当startTimei ≥ endTimej 或 endTimei ≥ startTimej时,活动i与活动j相容。
贪心选择
选择这样一个活动:选出它后,剩下的资源应能被尽量多的其他任务所用
直觉告诉我们,应该选择E中最早结束的活动,因为它剩下的资源可供它之后尽量
多的活动使用。这个选择的正确性可以证明,有兴趣的同学可以查查看。
我的做法是将活动定义为一个类,属性有开始时间—startTime、结束时间—endtTime、
活动名称—name,类中还实现了对活动排序的接口:
public static class ACs implements Comparable<ACs>{
private int startTime;
private int endTime;
private String name;
public ACs(int startTime, int endTime,String name) {
super();
this.startTime = startTime;
this.endTime = endTime;
this.name = name;
}
public ACs() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}