问题描述:

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

来换一个描述

为了能够更加生动说明问题的整个过程,所以换一个类似的描述来契合《算法图解》一书中的描述。

你没法让这些课都在这间教室上,因为有些课的上课时间有冲突。

你希望这间教室上尽可能多的课。如何选出尽可能多且时间不冲突的课程呢?

这个问题似乎很难,但算法却简单得让人吃惊。具体做法如下:
- ①选出结束最早的课,它就是要在这间教室上的第一堂课。
- ②接下来,必须选择第一堂课结束后才开始的课。同样,你选择结束最早的课,这将是要在这间教室上的第二堂课。

重复这样做就能找出答案!下面来试一试。美术课的结束时间最早,为10:00 a.m,因此它就是第一堂课。

接下来的课必须在10:00 a.m后开始,且结束得最早。

英语课不行,因为它的时间与美术课冲突,但数学课满足条件。最后,计算机课与数学课的时间是冲突的,但音乐课可以。

因此将在这间教室上如下三堂课。

贪婪算法很简单:每步都采取最优的做法。在这个示例中,你每次都选择结束最早的课。用专业术语说,就是你每步都选择局部最优解,最终得到的就是全局最优解。听上去有些神奇,但对于这个调度问题上,上述的简单算法找到的就是最优解。

数据输入

第一行有1个正整数k,表示有k个待安排的活动。接下来的k行中,每行有两个正整数,分别表示k个待安排的活动开始时间和活动结束时间。时间以0点开始的分钟计。

由于问题定义上有些纰漏,但通常,我们认为如果上一个活动在t时间结束,下一个活动最早应该在t+1时间开始(上述问题有一定出入)

代码实现

考虑到用户输入并不会按照开始的时间或者结束的时间严格输入,所以我们自己或许要加一个排序算法,这对我们自己遍历也会提供方便:

private static int meeting_problem(int[] startTime,int[] endTime){//一组活动数据的最优解int maxresult = 1;//冒泡排序,对startTime和endTime数据进行排序for (int i = 0; i < endTime.length-1; i++) {boolean canBreak = true;for (int j = 1; j < endTime.length - i; j++) {if (endTime[j-1] > endTime[j]) {int temp = endTime[j - 1];endTime[j-1] = endTime[j];endTime[j] = temp;int temp2 = startTime[j - 1];startTime[j-1] = startTime[j];startTime[j] = temp2;canBreak = false;}}if (canBreak) {break;}}// 记录上一次活动的结束时间int key = endTime[0];for (int i = 1; i < endTime.length; i++) {// 如果活动的开始时间能够大于上一次活动的结束时间if (startTime[i] - key >= 1){//计数+1maxresult ++;//保存结束时间key = endTime[i];}}return maxresult;
}

结合输入的代码:

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();int[] results = new int[num];for (int i = 0; i < num; i++) {int a = scanner.nextInt();int[] startTimes = new int[a];int[] endTimes = new int[a];for (int j = 0; j < a; j++) {startTimes[j] = scanner.nextInt();endTimes[j] = scanner.nextInt();}results[i] = (meeting_problem(startTimes, endTimes));}for (Integer result:results) {System.out.println(result);}
}

这里直接引用了 黑白咖 的文章:http://www.jianshu.com/p/0ce92abe862d 中的代码。

另外一种思路

我们也可以通过找最大重叠数来完成,这里不符合贪心策略,所以就不作深入研究。

欢迎转载,转载请注明出处!
@我没有三颗心脏
CSDN博客:http://blog.csdn.net/qq939419061
简书:http://www.jianshu.com/u/a40d61a49221

会场安排问题(贪心法)相关推荐

  1. NYOJ 14 会场安排问题 贪心算法 之 选择不相交区间

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...

  2. java活动安排_贪心法求解活动安排(java实现)

    贪心法描述: 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优 ...

  3. C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...

    贪心算法解决会场安排问题多处最优服务次序问题(含源代码) 西 安年月日-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源 ...

  4. 会场安排问题贪心算法

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

  5. 7-37 会场安排问题——贪心

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

  6. 贪心法——活动安排问题

    贪心法--活动安排问题 贪心法 贪心法的本质可以认为是动态规划在特定条件下的优化.贪心法满足两个性质,最优子结构性质和贪心选择性质. 满足最优子结构性质意味着问题可以被层层分解为子问题,这些子问题构成 ...

  7. 会场安排问题(C语言实现)

    会场安排问题 贪心算法.贪心策略 题目描述 只有一个会场,输入总共的场数与开始时间和结束时间,输出最多能安排的场数. 输入: 5 1 23 12 24 25 35 36 80 38 50 输出: 3 ...

  8. 贪心算法之——会场安排(nyoj14)

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...

  9. NYOJ-14 会场安排问题(经典贪心,区间完全不覆盖模板)

    附另一:此类问题选题总结:https://blog.csdn.net/qq_41289920/article/details/81001357 题干: 会场安排问题 时间限制:3000 ms | 内存 ...

  10. 贪心算法——活动安排、会场安排

    重要参数:结构体,当前时间time,cmp比较器 第一题--活动安排: 任务描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校 ...

最新文章

  1. 【工作感悟】mysql授权root远程访问
  2. 《人人都是产品经理》阅读笔记一
  3. jvm性能调优实战 - 38System.gcy引发的惨案
  4. 将数组中的值按逆序重新存放
  5. ArrayBlockingQueue原理分析
  6. 如何在Cloud for Customer overview UI上扩展新的按钮
  7. PAT甲题题解-1106. Lowest Price in Supply Chain (25)-(dfs计算树的最小层数)
  8. NOI2016区间bzoj4653(线段树,尺取法,区间离散化)
  9. Spring : Spring AOP源码解析
  10. C语言实用基础大总结(高效快速学习精华、实用语句案例多)
  11. Android音频框架笔记 - 上篇
  12. 宝塔Linux面板 5.9专业版破解,付费插件安装免费使用,全网首发!
  13. 计算机网络nos是什么意思,什么是网络操作系统(NOS)
  14. 红帽linux命令符,红帽子Linux_命令全解.doc
  15. JSP基础教程【1】
  16. python+vue+django高校教职工人事档案管理系统
  17. pandas read_csv sep用法
  18. RationalDMIS 7.0量块程序(力合)
  19. 【Linux】Linux进程控制(学习复习兼顾)
  20. 国内20家优秀的低代码平台/厂商汇总

热门文章

  1. 网络需求分析课堂作业
  2. FireFox火狐浏览器字体模糊的解决办法
  3. wp7和wp8的区别
  4. ROS source设置bashrc环境变量无效
  5. 在线订货系统(SSH框架)
  6. 《2022中国数据智能产业图谱3.0版》重磅发布
  7. T3部署到云服务器,T6的服务器可以部署在云服务器上吗?
  8. 犯罪心理学Seasons one
  9. 湖北武汉材料员报考砼的施工前中后的质量把控建筑七大员报考
  10. 如何搭建高德离线地图服务?