[算法导论]练习16.1-4 活动教室分配(区间着色问题)

转载请注明原创:http://www.cnblogs.com/StartoverX/p/4608412.html

题目:

  有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行。我们希望使用最少的教室完成所有活动。

  设计一个高效的贪心算法求每个活动应该在哪个教室进行。

 

分析:

  本题是对书中活动选择问题的一个扩展。在活动选择问题中,我们要求的是一个最大兼容活动集,也就是在所有时间内时间不重叠的最多的活动集合。

  易知,这样一个活动集,就是一个教室最多能够举办的活动集。所以剩下的活动一定不能和该活动集内的活动在同一个教室举行。我们不断对剩下的活动使用贪心算法,需要多少次贪心能够选取完所有的活动,就最少需要几个教室。

  我们首先对所有活动按结束时间排序。遍历所有活动,如果下一个活动开始时间比某教室中最后一个活动结束时间晚,则加入该教室。如果不能加入已使用的任何教室,则需要新开一个教室。

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>using namespace std;typedef pair<int,int> Acti;//用起始时间和结束时间的pair表示一个活动。void party(vector<Acti>& acti_vec)
{        sort(acti_vec.begin(),acti_vec.end(),[](const Acti& a,const Acti& b){return a.second < b.second;});//按结束时间对所有活动排序。    vector<vector<Acti>> classroom;//教室列表。vector<Acti> classroom1;classroom1.push_back(*acti_vec.begin());//初始化第一个教室,将结束时间最早的活动放入。    classroom.push_back(classroom1);//将第一个教室加入教室列表。for(int i = 1;i<(int)acti_vec.size();i++)//遍历一遍活动列表。
    {int j;for(j = 0;j < (int)classroom.size();j++){if(acti_vec[i].first >= (*(classroom[j].end()-1)).second)//如果该活动的开始时间比某教室目前为止最后一个活动结束结束时间晚,则加入该教室。
            {classroom[j].push_back(acti_vec[i]);break;}}    if(j == (int)classroom.size())//如果无法加入当前任何一个教室,则需要一个新的教室。
        {vector<Acti> classroom_temp;classroom_temp.push_back(acti_vec[i]);classroom.push_back(classroom_temp);}}    for(int i = 0;i < (int)classroom.size();i++)//对每一个教室,按起始时间 结束时间输出每一个活动。
    {cout<<"classroom "<<i+1<<":"<<endl;for(int j = 0;j < (int)classroom[i].size();j++){cout<<classroom[i][j].first<<" "<<classroom[i][j].second<<endl;}}
}int main()
{vector<Acti> acti_vec = {{1,4},{3,5},{0,6},{5,7},{3,9},{5,9},{6,10},{8,11},{8,12},{2,14},{12,16}};party(acti_vec);return 0;
}

   在本题解法的第一次实现中犯了一个错误,错误的使用了迭代器,然而,由于在遍历的过程中,要向classroom的vector中添加元素,当vector被修改后,原先的迭代器都会失效,所以不能使用迭代器,而改用int下标。

 

转载于:https://www.cnblogs.com/StartoverX/p/4608412.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言选择菜单程序设计,c语言课程设计报告-- 使用菜单选择趣味程序.doc

c语言课程设计报告-- 使用菜单选择趣味程序青岛农业大学课程设计报告题 目&#xff1a; 使用菜单选择趣味程序姓 名&#xff1a; 杨丽娜学 院&#xff1a; 理学与信息科学学院专 业&#xff1a; 通信工程班 级&#xff1a; 2班学 号&#xff1a;指导教师&#xff1a;年月日目 录…

各种服务常用端口号

常见的数据库&#xff0c;默认端口号是多少: 一、关系型数据库 1、MySql数据库 &#xff0c;默认端口是: 3306&#xff1b; 2、Oracle数据库 &#xff0c;默认端口号为&#xff1a;1521&#xff1b; 3、Sql Server数据库 &#xff0c;默认端口号为&#xff1a;1433&#xff…

jboss配置ejb容器_JBoss AS 7 EJB3池配置

jboss配置ejb容器现在已经发布了AS 7.0.1&#xff0c;下面让我们看看有哪些新的EJB3功能可用。 就像我在上一篇文章中提到的那样 &#xff0c;AS 7.0.1现在允许您为无状态会话bean和MDB配置池。 当前&#xff0c;我们允许在子系统级别配置池&#xff0c;这意味着该池将适用于服…

教你玩转CSS的所有字体,走过路过不要错过!!!

目录 CSS 字体 CSS字型 字体系列 字体样式 字体大小 设置字体大小像素 用em来设置字体大小

c语言单元二实验报告,C语言第七次实验报告

C程序设计实验报告姓名&#xff1a;林世龙 实验地点&#xff1a;学校 实验时间&#xff1a;2020.06.03实验项目8.31.指针基础及指针运算8.3.2.数据交换8.3.3.字符串反转及字符串连接8.3.4.数组元素奇偶排列一、实验目的与要求1、加强对学生对指针数据类型的理解&#xff0c;熟…

(剑指Offer)面试题4:替换空格

题目&#xff1a; 请实现一个函数&#xff0c;把字符串中的每个空格替换成“%20”&#xff0c;例如输入“We are happy”,则输出“We%20are%20happy”。 思路&#xff1a; 背景&#xff1a; 在网络编程中&#xff0c;如果URL参数中含有特殊字符&#xff0c;如空格&#xff0c;#…

Burpsuite爆破含CSRF-Token的程序

转载至https://www.se7ensec.cn/2018/10/21/Burpsuite%E7%88%86%E7%A0%B4%E5%90%ABCSRF-Token%E7%9A%84%E7%A8%8B%E5%BA%8F/ 3 年前发表 8 个月前更新 渗透测试 2 分钟读完 (大约273个字) 358次访问 Burpsuite爆破含CSRF-Token的程序 1. 抓包 0x01 开启burpsuite代理&#xff0…

Java Concurrency Essentials教程

课程大纲 并发一直是开发人员面临的挑战&#xff0c;编写并发程序可能非常困难。 引入并发性时&#xff0c;可能会发生很多事情&#xff0c;并且系统的复杂性会大大增加。 但是&#xff0c;编写健壮的并发程序的能力是开发人员的必备工具&#xff0c;并且可以帮助构建复杂的企…

如何玩转CSS链接(link)知识点?

CSS 链接 不同的链接可以有不同的样式。 链接样式 链接的样式,可以用任何CSS属性(如颜色,字体,背景等)。 特别的链接,可以有不同的样式,这取决于他们是什么状态。 这四个链接状态是: a:link - 正常,未访问过的链接a:visited - 用户已访问过的链接a:hover - 当用户…

IOS_月薪10k以上知识大总结

http://blog.csdn.net/sakulafly/article/details/40888143 转载于:https://www.cnblogs.com/luningning0901/p/4626749.html

adc0808的c语言编程51,51单片机驱动ADC0808电路图C51及汇编程序

这两天刚刚完成了一个用C编写的程序&#xff0c;这是我第一个用C语言编写的程序&#xff0c;并且调试成功。第一个C程序&#xff0c;值得纪念&#xff0c;也值得以后参考。本程序的功能是&#xff1a;1.ADC0808转换功能&#xff1b;2.数据16进制显示&#xff1b;3.串行通信数据…

正则表达式贪婪与非贪婪模式

正则表达式贪婪与非贪婪模式 之前做程序的时候看到过正则表达式的贪婪与非贪婪模式&#xff0c;今天用的时候就想不起来了&#xff0c;现在这里总结一下&#xff0c;以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配 如&#xff1a;String str"abcaxc"…

使用jOOQ DSL

本文是我们学院课程的一部分&#xff0c;标题为jOOQ –类型安全的数据库查询 。 在SQL和特定关系数据库很重要的Java应用程序中&#xff0c;jOOQ是一个不错的选择。 当JPA / Hibernate抽象过多&#xff0c;JDBC过多时&#xff0c;这是一种替代方法。 它显示了一种现代的领域特…

[Noip模拟赛] Power

POWER 源程序名 POWER.??? (PAS,C,CPP) 可执行文件名 POWER.EXE 输入文件名 POWER.IN 输出文件名 POWER.OUT 多瑞卡得到了一份有趣而高薪的工作。每天早晨他必须关掉他所在村庄的街灯。所有的街灯都被设置在一条直路的同一侧。 多瑞卡每晚到早晨5点钟都在晚会上&a…

如何玩转CSS列表样式?速查!

目录 CSS 列表 列表 不同的列表项标记 作为列表项标记的图像 浏览器兼容性解决方案 列表 -简写属性

linux逆向工程反汇编,Kali Linux 逆向工程工具 Jad 教程

日期&#xff1a;2017年12月21日观看&#xff1a; 1,895 C 次用法&#xff1a;jad [option(s)] jad [选项(s)] 选项&#xff1a;-a - 生成JVM指令作为注释(注释)-af - 注释时输出完全限定的名称-b - 生成冗余大括号(大括号)-clear - 清除所有的前缀&#xff0c;包括默认的前缀-…

任意文件读取及删除漏洞

任意文件读取漏洞及危害 通过提交专门设计的输入&#xff0c;攻击者就可以在被访问的文件系统中读取或写入任意内容&#xff0c;往往能够使攻击者从服务器上获取敏感信息文件&#xff0c;正常读取的文件没有经过校验或者不严格&#xff0c;用户可以控制这个变量读取任意文件。…

restful web_RESTful Web服务可发现性,第4部分

restful web这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第四篇 。 本文将重点介绍REST API&#xff0c;HATEOAS的可发现性以及由测试驱动的实际方案。 引入REST可发现性 API的可发现性是一个值得引起足够关注的…

微信小程序微信支付安卓手机可以,苹果手机支付失败。

问题截图: 解决办法有3种可能性,请按照对应的情况排查: 1.wx.request 无法发起网络请求,提示没有权限,域名已经配置过了,证书检测也是正确没问题的? 测试ios和安卓,假如有一方可以,一方不行,则是证书问题,请选用受认可的证书 检测地址:https://www.qcloud.co…

面试知识点总结01

1.Android 版本Bug 想必使用过 Android 5.0.1 系统的用户对内存泄露 bug 不会感到陌生&#xff0c;此缺陷不仅会导致内存占用过高&#xff0c;还会进而致使应用及其后台进程被强制关闭&#xff0c;甚至是系统界面崩溃等。 内存泄露 信息泄露 流量泄露 2.ArrayList 和LinkList的…