当前位置: 首页 > news >正文

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

目录

一、【实验目的】

二、【实验内容】

三、实验源代码


一、【实验目的】

(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
*/

【输出结果】

相关文章:

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

目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 &#xff08;1&#xff09;熟悉贪心法的设计思想 &#xff08;2&#xff09;理解贪心法的最优解与正确性证明之间的关系 &#xff08;3&#xff09;比较活动选择的各种“贪心”策略&#xff0c;…...

Ubuntu20.04右键打不开终端

今天用virtualbox安装了ubuntu20.04 问题&#xff1a;右键打开终端&#xff0c;怎么也打开不了&#xff01; 点了也没反应&#xff0c;或者鼠标转小圈圈&#xff0c;然后也没有反应… 解决方法&#xff1a; 1、Ctrl Alt F6 先切换到终端访问界面 mac电脑 Ctrl Alt F6 …...

XML元素

XML 元素是XML文档中的基本组成单位&#xff0c;它由开始标签、结束标签和内容组成&#xff0c;格式如下&#xff1a; <element>content</element>常见的XML元素包括&#xff1a; 根元素&#xff08;Root Element&#xff09;&#xff1a;XML文档中的最外层元素&…...

融入新科技的SLM27211系列 120V, 3A/4.5A高低边高频门极驱动器兼容UCC27284,MAX15013A

SLM27211是高低边高频门极驱动器&#xff0c;集成了120V的自举二极管&#xff0c;支持高频大电流的输出&#xff0c;可在8V~17V的宽电压范围内驱动MOSFET&#xff0c;独立的高、低边驱动以方便控制&#xff0c;可用于半桥、全桥、双管正激和有源钳位正激等拓。有极好的开通、关…...

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 文章目录 代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯理论基础一、常规题目二、解题步骤…...

CSS拟物按钮

<div class"btn">F</div>.btn {margin: 150px 0 0 150px;display: flex;justify-content: center;align-items: center;width: 100px;height: 100px;background-color: #fff;border-radius: 20px;font-size: 50px;color: #333;/* 禁止选中文本 */user-se…...

websevere服务器从零搭建到上线(三)|IO多路复用小总结和服务器的基础框架

文章目录 epollselect和poll的优缺点epoll的原理以及优势epoll 好的网络服务器设计Reactor模型图解Reactor muduo库的Multiple Reactors模型 epoll select和poll的优缺点 1、单个进程能够监视的文件描述符的数量存在最大限制&#xff0c;通常是1024&#xff0c;当然可以更改数…...

解决宝塔Nginx和phpMyAdmin配置端口冲突问题

问题描述 在对基于宝塔面板的 Nginx 配置文件进行端口修改时&#xff0c;我注意到 phpMyAdmin 的端口配置似乎也随之发生了变化&#xff01; 解决方法 官方建议在处理 Nginx 配置时&#xff0c;应避免直接修改默认的配置文件&#xff0c;以确保系统的稳定性和简化后续的维护…...

光伏EPC管理软件都有哪些功能和作用?

光伏EPC管理软件是用于光伏工程项目管理的综合性工具&#xff0c;它涵盖了从项目策划、设计、采购、施工到运维的各个环节。 1、项目总览 管理所有项目计划&#xff0c;包括项目类型、项目容量等。 调整和优化项目计划&#xff0c;以应对不可预见的情况。 2、施工管理 制定…...

BGP学习一:关于对等体建立和状态组改变

目录 一.BGP基本概念 &#xff08;1&#xff09;.BGP即是协议也是分类 1.早期EGP 2.BGP满足不同需求 3.BGP区域间传输的优势 &#xff08;1&#xff09;安全性——只传递路由信息 &#xff08;2&#xff09;跨网段建立邻居 4.BGP总结 5.BGP的应用 &#xff08;1&#…...

ETL工具kettle(PDI)入门教程,Transform,Mysql->Mysql,Csv->Excel

什么是kettle&#xff0c;kettle的下载&#xff0c;安装和配置&#xff1a;ETL免费工具kettle(PDI)&#xff0c;安装和配置-CSDN博客 mysql安装配置&#xff1a;Linux Centos8 Mysql8.3.0安装_linux安装mysql8.3-CSDN博客 1 mysql -> mysql 1.1 mysql CREATE TABLE user_…...

常见地图坐标系间的转换算法JavaScript实现

文章目录 🍉 不同的地图厂商使用不同的坐标系来表示地理位置。以下简述:🍉 前置常量和方法:🍉 BD-09转GCJ-02(百度转谷歌、高德)🍉 GCJ-02转BD-09(谷歌、高德转百度)🍉 WGS84转GCJ-02(WGS84转谷歌、高德)🍉 GCJ-02转WGS84(谷歌、高德转WGS84)🍉 BD-09转wgs84坐…...

基于python的大麦网自动抢票工具的设计与实现

基于python的大麦网自动抢票工具的设计与实现 Design and Implementation of Da Mai Net Ticket Grabbing tool based on Python 完整下载链接:基于python的大麦网自动抢票工具的设计与实现 文章目录 基于python的大麦网自动抢票工具的设计与实现摘要第一章 引言1.1 研究背景…...

2024年5月树莓集团快讯

树莓集团近期快讯 1 园区专场招聘会进校园 国际数字影像产业园联合四川城市职业学院的专场招聘会成功召开&#xff0c;共计提供400余个工作岗位。 2 园区硬件优化再升级 园区硬件优化再升级&#xff0c;智能门禁系统及人脸识别系统下周投入使用。 3 基地短剧合作交流 天府…...

网站localhost和127.0.0.1可以访问,本地ip不可访问解决方案

部署了一个网站, 使用localhost和127.0.0.1加端口号可以访问, 但是使用本机的ip地址加端口号却不行. 原因可能有多种. 可能的原因: 1 首先要确认是否localhost对应的端口是通的(直接网址访问), 以及你无法访问的那个本机ip是否正确(使用ping测试)&#xff1b; 2 检查本机的防火…...

Docker Dockerfile如何编写?

Dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了一条条构建镜像所需的指令和说明。 1.指令说明 FROM&#xff0c;构建镜像基于哪个镜像 MAINTAINER&#xff0c;镜像维护者姓名或邮箱地址 RUN&#xff0c;构建镜像时运行的指令 CMD&#xff0c;运行容器时执…...

Python数独游戏

数独&#xff08;Sudoku&#xff09;是一种逻辑性的数字填充游戏&#xff0c;玩家需要在一个分为九宫的81格网格上填入数字&#xff0c;同时满足每一行、每一列以及每个宫&#xff08;3x3的子网格&#xff09;的数字都不重复。 在Python中实现一个数独游戏可以涉及到多个方面&…...

24 | MySQL是怎么保证主备一致的?

MySQL 主备的基本原理 内部流程 备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接。一个事务日志同步的完整过程是这样的: 在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始…...

2.数据类型与变量(java篇)

目录 数据类型与变量 数据类型 变量 整型变量 长整型变量 短整型变量 字节型变量 浮点型变量 双精度浮点型 单精度浮点型 字符型变量 布尔型变量&#xff08;boolean&#xff09; 类型转换 自动类型转换(隐式) 强制类型转换(显式) 类型提升 字符串类型 数据类…...

QT设计模式:桥接模式

基本概念 桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与它的实现部分分离&#xff0c;使得它们可以独立地变化&#xff0c;而不会相互影响。 需要实现的结构如下&#xff1a; 抽象部分&#xff08;Abstraction&#xff09;&#xff1a;定义了抽象类的接口&#x…...

Arduino蓝牙TPMS解析库:7字节广告数据逆向与嵌入式解码实践

1. BluetoothTPMS 库技术解析&#xff1a;面向嵌入式系统的蓝牙胎压监测数据解码实践1.1 项目定位与工程价值BluetoothTPMS 是一个专为 Arduino 平台设计的轻量级开源库&#xff0c;核心目标是实现对低成本商用 TPMS&#xff08;Tire Pressure Monitoring System&#xff09;传…...

永磁同步电机的 MTPA + 弱磁控制算法 Simulink 模型探索

永磁同步电机的MTPA弱磁控制算法simulink模型。 转速从4000变到16000转&#xff0c;效果较好&#xff0c;附赠核心模型对应公式文档。在电机控制领域&#xff0c;永磁同步电机&#xff08;PMSM&#xff09;因其高效、高功率密度等优点&#xff0c;被广泛应用于各种工业和民用场…...

nRF54L15实现更快的处理速度

Nordic的nRF54L15系统级芯片相比前代nRF52系列&#xff0c;不仅速度更快、功耗更低&#xff0c;还配备了更丰富的外设&#xff0c;” 刘佳杭继续说道&#xff0c;“基于Arm Cortex-M33处理器的HJ-N54L_SIP不仅能处理更复杂的应用程序&#xff0c;同时显著提升了处理速度。系统级…...

(八)前端,如此简单!---五组结构

js中有五个结构&#xff0c;共同构成了处理网络请求与响应的核心 API&#xff0c;覆盖从构建请求、管理元数据到解析数据的完整链路。 一、URL const url new URL(https://api.example.com/users?id123&name张三#section1)url.protocol // "https:" 协议 url.h…...

知识蒸馏(Knowledge Distillation)完全指南:原理、实践与进阶

一句话概括&#xff1a;知识蒸馏是一种模型压缩技术&#xff0c;它让一个轻量级的“学生模型”模仿一个高性能的“教师模型”的输出行为&#xff0c;从而在保持小体积、低延迟的同时&#xff0c;获得接近大模型的能力。一、为什么需要知识蒸馏&#xff1f;—— 大模型的“奢侈”…...

从OpenJDK到GraalVM:JDK21安装后,你还可以试试这些高性能Java运行时

从OpenJDK到GraalVM&#xff1a;JDK21安装后&#xff0c;你还可以试试这些高性能Java运行时 当你完成JDK21的基础安装后&#xff0c;Java生态的探索才刚刚开始。现代Java开发早已不再局限于传统JVM&#xff0c;越来越多的创新运行时正在重塑性能边界。本文将带你深入GraalVM、L…...

Python 算法详解:从原理到实践

Python 算法详解&#xff1a;从原理到实践 1. 背景与动机 算法是计算机科学的核心&#xff0c;它是解决问题的步骤和方法。Python 作为一种功能强大的编程语言&#xff0c;提供了丰富的工具和库来实现各种算法。掌握 Python 算法不仅可以提高程序的效率&#xff0c;还可以培养解…...

ROS2数据录制实战:用ros2 bag记录小海龟运动轨迹(附常见问题排查)

ROS2数据录制实战&#xff1a;从入门到精通的ros2 bag全指南 小海龟在屏幕上划出优美轨迹的瞬间&#xff0c;你是否想过如何完整记录这些运动数据&#xff1f;ROS2中的ros2 bag工具正是为解决这类需求而生。作为机器人开发中的数据"时光机"&#xff0c;它不仅能忠实记…...

Linux系统编程:popen函数捕获命令输出的原理与实践

1. 从system到popen&#xff1a;为什么我们需要捕获命令输出&#xff1f;在Linux系统编程中&#xff0c;调用shell命令是再常见不过的需求。很多开发者第一个想到的就是system()函数——简单粗暴&#xff0c;一行代码就能执行命令。但真正做过实际项目的人都知道&#xff0c;sy…...

Audacity音频编辑引擎深度解析:模块化架构设计与高性能音频处理技术

Audacity音频编辑引擎深度解析&#xff1a;模块化架构设计与高性能音频处理技术 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity Audacity作为一款开源跨平台专业音频编辑软件&#xff0c;其最新版本在架构设计和性…...