算法设计课第五周(贪心法实现活动选择问题)

news2024/11/27 18:49:36

目录

一、【实验目的】

二、【实验内容】

三、实验源代码


一、【实验目的】

(1)熟悉贪心法的设计思想

(2)理解贪心法的最优解与正确性证明之间的关系

(3)比较活动选择的各种“贪心”策略,探讨最优算法。

二、【实验内容】

有n项活动申请使用同一场所,每项活动有一个开始和结束时间,如果任何两个活动不能重叠,问如何选择这些活动,使得被安排活动数量达到最多。

要求选择两项“贪心”策略进行比较,其中一个是最优的。建议最优算法参考教材P88的算法4.1.同时可以采用教材例4.1的数据进行验证。

三、实验源代码

#include <bits/stdc++.h>
using namespace std;
//有n个需要在同一天使用同一个教室的活动a1, a2, …, an,
//教室同一时刻只能由一个活动使用。每个活动ai都有一个开始时间si和结束时间fi。
//一旦被选择后,活动ai就占据半开时间区间[si, fi)。如果[si, fi]和[sj, fj]互不重叠,
//ai和aj两个活动就可以被安排在这一天。
//该问题就是要安排这些活动使得尽量多的活动能不冲突的举行。《算法导论》

struct activity
{
	int start;
	int end;
}a[200];

int n;
vector<activity> set1, set2;

//比较函数,按结束时间排序
bool cmp1(activity x, activity y) 
{
	if (x.end == y.end)
		return x.start < y.start;//不能加等于号,会报错
	return x.end < y.end;
}
//比较函数,按开始时间排序
bool cmp2(activity x, activity y)
{
	return x.start < y.start;//不能加等于号,会报错
}

int strategy1() //最佳策略
{
	sort(a, a + n, cmp1);
	int cnt = 1;//第一个活动已经选了,所以初始是1  (1,4)
	int j = 0;
	set1.push_back(a[0]);
	for (int i = 1; i < n; i++)
	{
		if (a[j].end <= a[i].start)
		{
			cnt++;
			j = i;
			set1.push_back(a[i]);
		}
	}
	return cnt;
}

int strategy2() //按开始时间排序策略
{
	sort(a, a + n, cmp2);
	int cnt = 1;//第一个活动已经选了,所以初始是1  (0,6)
	int j = 0;
	set2.push_back(a[0]);
	for (int i = 1; i < n; i++)
	{
		if (a[j].end <= a[i].start)
		{
			cnt++;
			j = i;
			set2.push_back(a[i]);
		}
	}
	return cnt;
}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i].start >> a[i].end;
	}
	
	cout << "策略1选择活动数量:" << strategy1() << endl;
	cout << "活动为:";
	for (auto& e : set1)
	{
		cout << '(' << e.start << ',' << e.end << ") ";
	}
	cout << endl;
	cout << "策略2选择活动数量:" << strategy2() << endl;
	cout << "活动为:";
	for (auto& e : set2)
	{
		cout << '(' << e.start << ',' << e.end << ") ";
	}
}
/*
input:
11
3 5
1 4
12 14
8 12
0 6
8 11
6 10
5 7
3 8
5 9
2 13
*/

【输出结果】

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

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

相关文章

CSP-j 2022csp-j完善程序易错题

易错题 答案23&#xff1a; 对 解析23&#xff1a; 函数 g 就是把函数 f 改成递推的形式 答案24&#xff1a; 对 解析23&#xff1a; 无。 答案25&#xff1a; C 解析25&#xff1a; m n ( m - 1 ) * ( 1 2 3 4 ... n ) O(mn^2) 答案26&#xff1a; C 解析26&#x…

软件设计师笔记(二)-零碎要点

本文内容来自笔者学习zst 留下的笔记&#xff0c;都是零碎的要点&#xff0c;查缺补漏&#xff0c;若有错误请大家提出&#xff0c;希望大家都能通过&#xff0c;记得加上免费的关注&#xff01;谢谢&#xff01; 目录 1. 算法 [广度和深度优先] 2. 遍历方式 3. 四大算法 …

RuoYi-Vue-Plus (Echarts 图表)

一、echarts 图表介绍和使用 官网地址:目前echarts以及贡献给Apache Apache EChartshttps://echarts.apache.org/zh/index.htmlecharts配置项手册 Documentation - Apache EChartshttps://echarts.apache.org/z

第19讲:Ceph集群CrushMap规则定制与调优:从基础到高级应用

文章目录 1.CrushMap规则拓扑结构1.1.集群默认的CrushMap规则拓补图1.2.自定义的CrushMap规则拓补图 2.定制CrushMap规则的方法以及注意事项3.通过二进制文件编写一套CrushMap规则3.1.将系统默认的CrushMap规则导出3.2.根据需求编写CrushMap规则3.3.将编写好的规则导入到集群中…

简单粗暴的翻译英文pdf

背景&#xff1a;看书的时候经常遇到英文pdf&#xff0c;没有合适的翻译软件可以快速翻译全书。这里提供一个解决方案。 Step 1 打开英文pdfCTRLA全选文字CTRLC复制打开记事本CTRLV复制保存为data.txt Step 2 写一个C脚本 // ToolPdf2Html.cpp : 此文件包含 "main&quo…

AJAX家政系统源码部署/售后更新/搭建/上线维护

基于FastAdmin和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统&#xff0c;用户端、服务端(高级授权)、门店端(高级授权)各端相互依赖又相互独立&#xff0c;支持选择项目、选择服务人员、选择门店多种下单方式&#xff0c;支持上门服务和到店核销两种服务方式…

如何安装ElasticSearch及相关件

一、简介 ElasticSearch是什么&#xff1f; elasticsearch简写es&#xff0c;es是一个高扩展、开源的全文检索和分析引擎&#xff0c;它可以准实时地快速存储、搜索、分析海量的数据。 ElasticSearch 插件 elasticsearch-head是一款专门针对于elasticsearch的客户端工具&am…

Gitee 码云与Git 交互

优质博文&#xff1a;IT-BLOG-CN 一、进入码云官方网站&#xff0c;注册用户 码云(Gitee.com)是一个类似于GitHub的在线代码托管平台。 码云提供了包括版本控制、代码托管、协作开发和代码分享等功能&#xff0c;基于Git开发&#xff0c;支持代码在线查看、历史版本查看、Fo…

什么是分库分表?代表性框架有哪些?

在互联网系统开发过程中&#xff0c;所谓的分库分表并不是一个新概念。或者说&#xff0c;对于很多开发人员而言&#xff0c;说起分库分表&#xff0c;大家都或多或少有所了解&#xff0c;也都知道数据量大了就需要进行分库分表。但是究竟如何实现分库分表呢&#xff1f; 要想…

去哪个网站找视频素材?哪里有视频素材不侵权?

在这个视觉内容日益丰富的时代&#xff0c;掌握优质的视频素材资源成了每位创作者的必备技能。高清、4K视频素材在制作中扮演着至关重要的角色&#xff0c;它们不仅提升了视觉效果&#xff0c;更增强了观众的沉浸感。下面将为您介绍几个全球知名的视频素材网站。 1. 蛙学府 提…

企业内外网隔离后的文件传输解决方案

一、企业为什么要进行内外网隔离 在当今信息化快速发展的时代&#xff0c;企业内部网络的构建和管理显得尤为重要。为了更好地保护企业信息安全和提高工作效率&#xff0c;许多企业选择将网络划分为内网和外网。那么&#xff0c;企业划分内外网的作用具体体现在哪些方面呢&…

从古代故事中领悟高情商回话

页面 页面代码 <% layout(/layouts/default.html, {title: 故事管理, libs: [dataGrid]}){ %> <div class"main-content"><div class"box box-main"><div class"box-header"><div class"box-title">&l…

【Django项目】 通过AI实现视频转文字

使用Django构建一个视频—>文字 转换器&#xff1a; 输入视频地址&#xff0c;通过OpenAI的接口分析视频&#xff0c;返回视频内容的文字。 视频 代码 运行此程序&#xff0c;需要OpenAI-key和设置Postgres数据库。 &#xff08;吐槽一下&#xff0c;作者把这些信息都直接写…

vue路由知识补充(updating···)

1路由守卫中的next() next()方法表示放行&#xff0c;如果不执行此方法路由不会跳转&#xff0c;此方法可以接收一个参数 字符串路径&#xff1a;如果传递一个字符串路径&#xff0c;那么路由会重定向到该路径。 next(/home); 路由对象&#xff1a;如果传递一个路由对象&…

搜维尔科技:光学动作捕捉系统用于城市公共安全智慧感知实验室

用户名称&#xff1a;西安科技大学 主要产品&#xff1a;Optitrack Priime41 光学动作捕捉系统&#xff08;8头&#xff09; 在6米8米的空间内&#xff0c;通过8个Optitrack Priime41光学动作捕捉镜头&#xff0c;对人体动作进行捕捉&#xff0c;得到用户想要的人体三维空间坐…

安卓手机平板使用Termux+Hexo搭建本地博客站点并实现无公网IP远程访问

文章目录 前言1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 本文主要介绍如何在安卓手机平板Termux中安装个人hexo博客并结合cpolar内网穿透工具&#xff0c;实现远程访问本地搭建的博客站点&#xff0c;无需公网IP。 Hexo 是一个用 Nodejs 编写的快速、简洁且高效…

Linux的并发与竞争

文章目录 一、并发二、竞争三、保护内容是什么四、解决并发与竞争的几种常用方法1.原子操作原子整型API函数原子位操作 API 函数 2.自旋锁自旋锁格式如下&#xff1a;自旋锁 API 函数自旋锁的使用注意事项 3.信号量信号量 API 函数信号量格式如下&#xff1a; 4.互斥体API函数如…

面试算法之哈希专题

赎金信 class Solution { public:bool canConstruct(string ransomNote, string magazine) {// 小写字母int r_cnt[26];int m_cnt[26];for(int i 0; i< magazine.size(); i) {m_cnt[magazine[i]-a]; // 统计}// 对比for(int i 0; i< ransomNote.size(); i) {if(m_cnt[r…

Python-----容器的介绍以及操作

1.列表和元组 1.列表是什么, 元组是什么&#xff1a; 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可. 但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表 列表…

ChatGPT开源的whisper音频生成字幕

1、前言 好了&#xff0c;那接下来看一下whisper开源库的介绍 有五种模型大小&#xff0c;其中四种仅支持英语&#xff0c;提供速度和准确性的权衡。上面便是可用模型的名称、大致的内存需求和相对速度。如果是英文版的语音&#xff0c;直接想转换为英文。 本来我是想直接在我的…