算法设计与分析——贪心算法——活动安排问题

问题描述:设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。
每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi 。
如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。

贪心算法总是做出在当前看来是最好的选择,也就是说,贪心算法并不从整体最优上加以考虑,所做出的的选择只是某种意义上的局部最优选择;
虽然贪心算法不是对所有的问题都能得到整体最优解,但对范围相当广的许多问题都能产生最优解,即使贪心算法不能得到整体最优解,但其最终结果却是最终结果却是最优解的很好的近似解

在这里插入图片描述

在这里插入图片描述
将活动按照结束时间进行从小到大排序。然后用i代表第i个活动,s[i]代表第i个活动开始时间,f[i]代表第i个活动的结束时间。按照从小到大排序,挑选出结束时间尽量早的活动,并且满足后一个活动的起始时间晚于前一个活动的结束时间,全部找出这些活动就是最大的相容活动子集合。

#include<iostream>
using namespace std;void activity_arrangement(int n,int start[],int final[],bool result[])
{		//先按活动的结束时间排好序 int temp;result[1]=true;temp=1;for(int i=2;i<=n;i++){if(final[temp]<=start[i]){result[i]=true;temp=i;}else{result[i]=false;}}}int main()
{int n;cout<<"输入活动的个数:";cin>>n; int start[n+1];int final[n+1];cout<<"输入活动的开始时间序列:";for(int i=1;i<=n;i++){cin>>start[i];}cout<<"输入活动的结束时间序列:";for(int i=1;i<=n;i++){cin>>final[i];}bool result[n+1];activity_arrangement(n,start,final,result);for(int i=1;i<=n;i++){cout<<result[i]<<" ";}return 0;} 

在这里插入图片描述
改进:能够自动进行排好结束时间

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;typedef struct Node
{int start;int final;
}node;bool cmp(node x,node y)
{if(x.final<y.final)return true;elsereturn false;
}
void activity_arrangement(int n,int start[],int final[],bool result[])
{		//先按活动的结束时间排好序 Node node[n+1];for(int i=1;i<=n;i++){node[i].start=start[i];node[i].final=final[i];}sort(node+1,node+n+1,cmp);for(int i=1;i<=n;i++){start[i]=node[i].start;final[i]=node[i].final;}int temp;result[1]=true;temp=1;for(int i=2;i<=n;i++){if(final[temp]<=start[i]){result[i]=true;temp=i;}else{result[i]=false;}}}int main()
{int n;cout<<"输入活动的个数:";cin>>n; int start[n+1];int final[n+1];cout<<"输入活动的开始时间序列:";for(int i=1;i<=n;i++){cin>>start[i];}cout<<"输入活动的结束时间序列:";for(int i=1;i<=n;i++){cin>>final[i];}bool result[n+1];activity_arrangement(n,start,final,result);for(int i=1;i<=n;i++){cout<<result[i]<<" ";}return 0;} 

在这里插入图片描述
自动排序的

#include<iostream>
#include<algorithm>
using namespace std;typedef struct Node
{int starttime;int finaltime;}node;bool cmp(node a, node b){return (a.finaltime<b.finaltime);}void activity_arrangement(int n,Node node[],bool result[])
{		//先按活动的结束时间排好序 sort(node+1,node+n+1,cmp);int temp;result[1]=true;temp=1;for(int i=2;i<=n;i++){if(node[temp].finaltime<=node[i].starttime){result[i]=true;temp=i;}else{result[i]=false;}}}int main()
{int n;cout<<"输入活动的个数:";cin>>n; Node node[n+1];cout<<"输入活动的开始和结束的时间序列:"<<endl;for(int i=1;i<=n;i++){cin>>node[i].starttime>>node[i].finaltime;}cout<<"活动的开始和结束的时间序列:"<<endl;for(int i=1;i<=n;i++){cout<<"["<<i<<"]:"<<"("<<node[i].starttime<<","<<node[i].finaltime<<")"<<endl;}bool result[n+1];activity_arrangement(n,node,result);cout<<"安排的活动为:"<<endl; int num=0;for(int i=1;i<=n;i++){if(result[i]==1){	num++;cout<<"["<<i<<"]:"<<"("<<node[i].starttime<<","<<node[i].finaltime<<")"<<endl;		}						}cout<<"可以安排的活动个数为:"<<num<<endl;return 0;} 

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

c语言——刷新控制台界面与返回上一级

#include<iostream> #include<stdlib.h> using namespace std;int main() {while(1){system("cls");//刷新控制台程序界面 cout<<"请输入1&#xff1a;进入下一级程序A:"<<endl;cout<<"请输入2&#xff1a;进入下一级程…

C# :异步编程的注意点

在上一篇《C#&#xff1a;异步编程中的 async 和 await》 中简单介绍了在 C# 中的异步编程以及 async 和 await 编程模型&#xff0c;本文介绍下异步编程的注意事项&#xff0c;主要有以下几个方面。同步中调用异步在同步代码中调用异步代码&#xff0c;容易导致死锁&#xff0…

makefile 打印变量_[Makefile] 缩进与空格--记录踩过的坑

今天折腾了好久&#xff0c;就为了debug两个makefile的bug。虽然最后找到原因了&#xff0c;但是&#xff0c;怎么说呢&#xff0c;用现在流行的话来说&#xff0c;实在是意难平啊&#xff01;必须写一篇记录一下&#xff01;第一个问题&#xff0c;是个语法高亮问题。今天观察…

算法设计与分析——贪心算法——背包问题

0-1背包问题&#xff1a; 前提&#xff1a;给定n种物品和一个背包。物品i的重量是Wi&#xff0c;其价值为Vi&#xff0c;背包的容量为C。 问题&#xff1a;应如何选择装入背包的物品&#xff0c;使得装入背包中物品的总价值最大? 背包问题&#xff1a; 与0-1背包问题类似&…

企业级精致 Blazor 套件 BootstrapBlazor 介绍

BootstrapBlazor1、前言 Blazor 作为一种 Web 开发的新技术已经发展有一段时间了&#xff0c;有些人标称 无 JS 无 TS&#xff0c;我觉得有点误导新人的意味&#xff0c;也有人文章大肆宣传 Blazor 是 JavaScript 的终结者&#xff0c;是为了替代 JavaScript 而生的&#xff0c…

算法设计与分析——贪心算法——最优装载问题

有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下&#xff0c;将尽可能多的集装箱装上轮船。 #include<iostream> #include<algorithm> #include<cstring> using namespace std;typedef str…

AgileConfig-轻量级配置中心 1.1.0 发布,支持应用间配置继承

AgileConfig轻量级配置中心自第一个版本发布不知不觉已经半年了。在并未进行什么推广的情况下收到了250个star&#xff0c;对我有很大的鼓舞&#xff0c;并且也有不少同学试用&#xff0c;并且给出了宝贵的意见&#xff0c;非常感谢他们。其中有一些意见非常好&#xff0c;但是…

如何在 C# 中使用 Dapper ORM

译文链接&#xff1a;https://www.infoworld.com/article/3025784/how-to-use-the-dapper-orm-in-c.html?nsdrtrue对象关系映射&#xff08;ORM&#xff09;这个概念已经存在很长时间了&#xff0c;ORM的作用就是用来解决 编程领域的 object model 和关系数据库中的 data mode…

GraphQL:简单开开始一个查询

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余&#xff0c;也让 API 更容易地随着时间推移而演进&#xff0c…

算法设计与分析——回溯法——批处理作业调度

问题描述&#xff1a;给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理&#xff0c;然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度&#xff0c;设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度…

探索.NET平台中的SIMD内在函数Vector

概述Vector&#xff08;向量&#xff09;是一种序列式容器&#xff0c;事实上和数组差不多&#xff0c;但它比数组更优越。一般来说数组不能动态拓展&#xff0c;因此在程序运行的时候不是浪费内存&#xff0c;就是造成越界。而Vector刚好弥补了这个缺陷&#xff0c;它的特征是…

算法设计与分析——回溯法——装载问题

0027算法笔记——【回溯法】回溯法与装载问题 自己写的代码&#xff1a; #include <iostream> using namespace std; template <class Type> class Loading {//friend Type MaxLoading(Type[],Type,int,int []);//private:public:void Backtrack(int i);int n, …

深入解析 C# 的 String.Create 方法

作者&#xff1a;Casey McQuillan译者&#xff1a;精致码农原文&#xff1a;http://dwz.win/YVW说明&#xff1a;原文比较长&#xff0c;翻译时精简了很多内容&#xff0c;对于不重要的细枝末节只用了一句话概括&#xff0c;但不并影响阅读。你还记得上一次一个无足轻重的细节点…

算法设计与分析——回溯法——n皇后问题

一、什么是N皇后问题&#xff1f; 在nn格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再nn的棋盘上放置n个皇后&#xff0c;任何2个皇后不妨在同一行或同一列或同一斜线上。 问题…

全局程序集缓存gac中安装程序集_我就不信2W字把源码拆的这么碎,你还不明白mybatis缓存...

前言不知道大家看到这张图感觉怎么样&#xff0c;不是难&#xff0c;一共也没有几个组件&#xff0c;但是真的让我想当头疼&#xff0c;因为在面试的时候&#xff0c;就这张图&#xff0c;对&#xff0c;你没看错&#xff0c;就这几个组件&#xff0c;那是让我相当难受啊MyBati…

GraphQL:和EntityFramework更配哦

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余&#xff0c;也让 API 更容易地随着时间推移而演进&#xff0c…

算法设计与分析——回溯法——符号三角形问题

#include<iostream> using namespace std;class Triangle{public:void Backtrack(int t);int n;//第一行的符号个数 int half;//n*(n1)/4 int count;//当前—的个数 int **p;//符号三角形矩阵 long sum; //已找到的符号三角形数 };void Triangle::Backtrack(int t) {if(…

mysql 默认事务隔离级别_MySQL 事务隔离级别详解

个人公众号『码农札记』&#xff0c;欢迎关注&#xff0c;查看更多精彩文章。 简介&#xff1a; MySQL的事务隔离级别一共有四个&#xff0c;分别是读未提交、读已提交、可重复读以及可串行化。四个特性ACID原子性 &#xff08;Atomicity&#xff09;事务开始后所有操作&#x…

如何在 Asp.Net Core 中对请求进行限流

译文链接&#xff1a;https://www.infoworld.com/article/3442946/how-to-implement-rate-limiting-in-aspnet-core.html在应用程序开发时&#xff0c;或许你有这样的想法&#xff0c;控制用户的请求频率来防止一些用户的恶意攻击&#xff0c;具体的说就是&#xff1a;为了预防…

算法设计与分析——动态规划——石子合并问题

1.石子合并问题 在一个圆形操场的四周摆放着n堆石子。现要将石子有序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆&#xff0c;并将新的一堆石子数记为该次合并的得分。设计一个算法&#xff0c;计算出将n堆石子合并成一堆的最小得分和最大得分。 #include<st…