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

目录

一、【实验目的】

二、【实验内容】

三、实验源代码


一、【实验目的】

(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.mzph.cn/bicheng/9749.shtml

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

相关文章

安卓手机APP开发__设备兼容性概述

安卓手机APP开发__设备兼容性概述 目录 概述 兼容性意味着什么? 控制你的APP对设备的可用性 设备特性 平台版本 屏幕配置

基于AI的Python爬虫-Scrapegraph-ai

网址 https://github.com/VinciGit00/Scrapegraph-ai 刚从github榜单看到的&#xff0c;将ai和爬虫结合起来的项目&#xff0c;我没安装&#xff0c;凡是关于ai的要么自己下载模型&#xff0c;要么用在线的api&#xff0c;这两样我现在都懒得装。 看介绍的话可以根据自然语言…

动态IP避坑指南:如何挑选合适的动态代理IP?

在如今的网络环境中&#xff0c;使用动态IP代理成为实现隐私保护、访问受限内容和提高网络效率的一种常见方式&#xff0c;选择合适的国外动态IP代理可以让我们的业务处理事半功倍。面对市面上琳琅满目的选择&#xff0c;如何挑选购买适合自己的动态IP代理服务呢&#xff1f;在…

pragma omp parallel for与pragma omp critical理解

pragma omp parallel for #pragma omp parallel for是OpenMP API中的一个编译器指令&#xff0c;用于在C/C程序中实现并行计算。这个指令告诉编译器下面的for循环应该被并行执行&#xff0c;即循环的迭代被分配到多个线程中&#xff0c;以便同时执行。这样做的目的是为了利用现…

【数据结构】手把手带你玩转线性表

前言&#xff1a; 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累。我…

弱监督语义分割-对CAM的生成过程进行改进1

一、仿射变换图像结合正则项优化CAM生成 论文&#xff1a;Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation &#xff08;CVPR,2020&#xff09; 1.SEAM方法 孪生网络架构&#xff08;Siamese Network Architecture&#xff09…

2024.5.10

TCP服务器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置窗口大小和窗口大小固定this->resize(727,879);this->setFixedSize(727,879);//创建…

2024- 人工智能药物设计- AIDD- 胶质母细胞瘤的相关论文研究

胶质母细胞瘤的相关论文研究 1. 胶质母细胞瘤的相关的论文 Natural Small Molecules Targeting NF-κB Signaling in Glioblastoma: This review discusses the role of NF-κB signaling in glioblastoma and highlights natural small molecules that can interfere with t…

STC8增强型单片机开发【定时器Timer⭐】

目录 一、引言 二、定时器基础知识 三、STC8定时器配置 四、代码示例 五、总结 一、引言 在单片机开发中&#xff0c;定时器&#xff08;Timer&#xff09;是一个极其重要的组件&#xff0c;它允许开发者基于时间触发各种事件或任务。STC8增强型单片机作为一款功能丰富的…

使用2G内存求20亿个数字中出现次数最多的N个

又是一个TOP -N的题目 我看了一下CSDN上大多数人的回答和GPT说的差不多&#xff0c;都是说使用哈希之类的&#xff1b; 我今天说一下我的解法&#xff0c;首先说一下不太快的基础解法 20亿数字使用uint32需要80GB&#xff0c; &#xff08;1&#xff09;分为40块读取&#…

Vue.js 组件 - 自定义事件

父组件是使用 props 传递数据给子组件&#xff0c;但如果子组件要把数据传递回去&#xff0c;就需要使用自定义事件&#xff01; 我们可以使用 v-on 绑定自定义事件, 每个 Vue 实例都实现了事件接口(Events interface)&#xff0c;即&#xff1a; 使用 $on(eventName) 监听事…

c++opencv Project3 - License Plate Detector

俄罗斯车牌识别案例&#xff1a;实时识别车牌&#xff0c;并且读取到指定文件夹中。 惯例先展示结果图&#xff1a; 对于摄像头读取图片进行车牌匹配&#xff0c;原理和人脸识别其实是一致的。 利用训练好的模型进行匹配即可。可参考&#xff1a; 对视频实现人脸识别-CSDN博…

电能表远程抄表系统是什么?

电能表远程抄表系统是一种优秀的电力管理方法&#xff0c;它通过自动化的形式搜集、解决与分析电能表的信息&#xff0c;进而取代了传统人工抄水表方法。其主要原理是运用物联网技术、通讯技术和大数据处理技术&#xff0c;完成对电度表数据信息实时、远程控制获取和管理方法。…

探索无界知识:用 ChatGPT 的原理学习任何事物!

为避免文章重复&#xff0c;您的文本已通过更改句式、用词以及句子结构进行了修改。现在的文本应该能更好地满足去重的需求&#xff1a; 从ChatGPT原理出发&#xff0c;我们探讨GPT如何启发人类学习和构建个人知识体系。 1. 明确学习目标 机器学习必须依靠目标函数。同样&…

【Qt 开发基础体系】QMap 类和 QHash 类以及 QVector 类

文章目录 1.QMap 详解1.1 QMap 的介绍1.2 QMap 的具体用法如下1.3 QmultiMap类 2.QHash 详解3. QMap 和 QHash 的对比4. QVector 详解 1.QMap 详解 1.1 QMap 的介绍 &#x1f427;① QMap<key,T>提供一个从类型为Key的键到类型为T的值的映射。通常&#xff0c;QMap存储的…

STC8增强型单片机开发【串口调试UART⭐⭐】

目录 一、引言 二、UART基础知识 三、STC8 UART配置 四、代码示例 上列代码中所需的库函数文件&#xff1a; 引入库函数的流程&#xff1a; 五、总结 一、引言 在单片机开发中&#xff0c;串口调试&#xff08;UART&#xff09;是一种常用的通信方式&#xff0c;用于实现…

LC719

719. 找出第 K 小的数对距离 719. 找出第 K 小的数对距离 - 力扣&#xff08;LeetCode&#xff09; 数对 (a,b) 由整数 a 和 b 组成&#xff0c;其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k &#xff0c;数对由 nums[i] 和 nums[j] 组成且满足 …

linux grep命令搜索指定路径

在Linux开发的过程中grep这个搜索命令&#xff0c;是必不可少的存在。它可以快速的搜索出来我们需要的关键字所在的位置。 有助于我们快速分析定位问题。 下面&#xff0c;分享一个简单实用的小技巧。 原始grep 最终grep grep过滤掉二进制的文件 -I选项 结论 这样子是不…

126.删除链表的倒数第N个节点(力扣)

题目描述 代码解决&#xff08;双指针&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, Li…

【QT教程】QT6信号与槽 QT信号与槽

QT6信号与槽 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费QT视…