您的位置:首页 > 其它

活动安排(贪心)

2017-11-08 19:15 169 查看
问题:有n个活动的集合A={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。

求解:安排尽量多项活动在该场地进行,即求A的最大相容子集。

分析:

1.对活动以结束时间增序排序,使剩余可安排时间最大化,以便安排更多的相容活动。

2.遍历排好序的活动,结束时间与下个活动的开始时间进行比较,不相容则继续遍历

package 算法实验;

import java.io.InputStream;
import java.util.*;

/**
* 测试数据
11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
12 14
2 13
*/

class Arr implements Comparable<Arr>{
public int start;
public int end;
/**
* 按结束时间递增排序
* @param o
* @return
*/
@Override
public int compareTo(Arr o) {
// TODO Auto-generated method stub
if (o.end > this.end) {
return -1;
} else if (o.end < this.end) {
return 1;
} else {
return 0;
}
}
}

public class Test2 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Arr[] arr = new Arr
;

for (int i = 0; i < n; i++) {
arr[i] = new Arr();
arr[i].start = sc.nextInt();
arr[i].end = sc.nextInt();
}
sc.close();

Arrays.sort(arr);

//保存结束时间,与下一个开始时间作比较
int flag = 0;

for (int i = 0; i < n; i++) {
if (flag <= arr[i].start) {
flag = arr[i].end;
System.out
4000
.println("start:" + arr[i].start + " end:" + arr[i].end);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: