南邮 OJ 1249 会场安排问题

该博客探讨了如何利用贪心算法解决南邮在线判题系统(OJ)上的1249题——会场安排问题。问题实质上是一个图着色问题,通过编程计算给出最少会场数的解决方案。博客提供了一个包含5个活动的样例输入及对应输出,提示读者理解并解决此问题。
摘要由CSDN通过智能技术生成

会场安排问题

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 255            测试通过 : 58 

比赛描述

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据您提供的问题,我提供以下的贪心算法实现: 1. 将所有待安排活动按照开始时间从早到晚排序。 2. 准备一个空闲会场的列表,初始化为空。 3. 遍历排序后的待安排活动列表,对于每个活动: - 如果空闲会场列表中存在可以安排活动会场,则将该活动安排在最早的那个会场上,并更新该会场的结束时间。 - 如果空闲会场列表中不存在可以安排活动会场,则新增一个会场,并将该活动安排在该会场上。 4. 返回最终使用会场数。 以下是Java实现代码: ```java import java.util.Arrays; import java.util.Comparator; import java.util.PriorityQueue; import java.util.Scanner; public class Main { static class Event { int start; int end; Event(int start, int end) { this.start = start; this.end = end; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int k = sc.nextInt(); Event[] events = new Event[k]; for (int i = 0; i < k; i++) { int start = sc.nextInt(); int end = sc.nextInt(); events[i] = new Event(start, end); } // 按照开始时间排序 Arrays.sort(events, Comparator.comparingInt(e -> e.start)); // 用小根堆维护空闲会场的结束时间 PriorityQueue<Integer> heap = new PriorityQueue<>(); for (Event e : events) { if (!heap.isEmpty() && heap.peek() <= e.start) { // 有空闲会场,选择最早结束的会场安排 heap.poll(); } // 新增一个会场 heap.offer(e.end); } System.out.println(heap.size()); } } ``` 输入数据示例: ``` 5 1 23 12 28 25 35 27 80 36 50 ``` 输出结果: ``` 3 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值