贪心法——选择不相交区间

选择不相交区间。数轴上有nn个开区间(ai,bi)(a_i, b_i)。选择尽量多个区间,使得这些区间两两没有公共点。

贪心思路:按b<script id="MathJax-Element-703" type="math/tex">b</script>的大小,将区间从小到大排序,选择最小的区间,再选择和该区间无交点的最小区间,以此往复,知道遍历完所有区间。

选择不相交区间算法实现

// 区间数据结构
struct Region {// 左区间int left;// 右区间int right;operator < (const Region &r) {return right < r.right;}
};// 贪心法
// 选择不相交区间
void region(Region *r, int n) {// 按右区间大小从小到大排序sort(r, r + n);// 最小右区间int minRight = r[0].right;cout << "区间为:(" << r[0].left << "," << r[0].right << ")" << endl;// 区间总数int sumRegion = 0;for(int i = 1; i < n; i++) {if(r[i].left >= minRight) {cout << "区间为:(" << r[i].left << "," << r[i].right << ")" << endl;minRight = r[i].right;}}
}

测试主程序

#include <iostream>
#include <algorithm>using namespace std;// 区间数据结构
struct Region {// 左区间int left;// 右区间int right;operator < (const Region &r) {return right < r.right;}
};// 贪心法
// 选择不相交区间
void region(Region *r, int n) {// 按右区间大小从小到大排序sort(r, r + n);// 最小右区间int minRight = r[0].right;cout << "区间为:(" << r[0].left << "," << r[0].right << ")" << endl;// 区间总数int sumRegion = 0;for(int i = 1; i < n; i++) {if(r[i].left >= minRight) {cout << "区间为:(" << r[i].left << "," << r[i].right << ")" << endl;minRight = r[i].right;}}
}int main() {while(true) {// n个开区间int n;cout << "请输入开区间的数量(0退出):";cin >> n;if(!n) {break;}Region r[n];for(int i = 0; i < n; i++) {cout << "第" << i + 1 << "个开区间(x,y)为:";cin >> r[i].left;cin >> r[i].right;}cout << "最大不相交开区间组合和总数为:" << endl;region(r, n);}return 0;
}

输出数据

请输入开区间的数量(0退出):5
第1个开区间(x,y)为:1 2
第2个开区间(x,y)为:2 3
第3个开区间(x,y)为:1 3
第4个开区间(x,y)为:3 5
第5个开区间(x,y)为:4 5
最大不相交开区间组合和总数为:
区间为:(1,2)
区间为:(2,3)
区间为:(3,5)
请输入开区间的数量(0退出):10
第1个开区间(x,y)为:1 3
第2个开区间(x,y)为:2 3
第3个开区间(x,y)为:5 6
第4个开区间(x,y)为:4 7
第5个开区间(x,y)为:3 8
第6个开区间(x,y)为:3 6
第7个开区间(x,y)为:6 8
第8个开区间(x,y)为:7 9
第9个开区间(x,y)为:10 11
第10个开区间(x,y)为:11 12
最大不相交开区间组合和总数为:
区间为:(1,3)
区间为:(5,6)
区间为:(6,8)
区间为:(10,11)
区间为:(11,12)
请输入开区间的数量(0退出):0Process returned 0 (0x0)   execution time : 73.788 s
Press any key to continue.

贪心法——选择不相交区间相关推荐

  1. 贪心算法——选择不相交区间问题

    题目描述:设有n个活动的集合,其中每个活动都要求使用同一个资源,而在同一时间内只有一个活动能够使用这一资源,每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi(si<fi),如果选 ...

  2. NYOJ 14 会场安排问题 贪心算法 之 选择不相交区间

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...

  3. 选择不相交区间(贪心:求不相交区间最多个数)

    选择不相交区间(转) 数轴上有n个区间[ai,bi],要求选择尽量多个区间,使得这些区间两两没有公共点. 贪心策略: 按照b1<=b2<=b3-的方式排序,然后从前向后遍历,每当遇到可以加 ...

  4. P1803 凌乱的yyy / 线段覆盖(选择不相交区间,贪心)

    题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加几个比赛. 由于yyy是蒟蒻,如果要参加 ...

  5. 简单区间问题 选择不相交区间 区间选点 区间覆盖问题解答及代码 C++

    1. 选择不相交区间 数轴上有n个开区间 ( a i , b i ) (a_i, b_i) (ai​,bi​).选择尽量多个区间,使得这些区间没有公共点. 这是最简单的区间问题,很多区间问题都需要先排 ...

  6. 选择不相交区间(贪心算法) By ACReaper

    题目的分析被说得有点绕.自己理解是这样,首先由题目我们知道选择的区间都是相互不相交的,除这之外,我们的目标是尽量的让选择的区间达到最大化. 所以我们可以先对齐排序,因为输入是随机的.假设每个区间表示为 ...

  7. 区间相关问题的学习: 最多不相交区间问题,区间选点问题与区间覆盖问题

    区间相关问题包括: 1)最多不相交区间问题; 2)区间选点问题; 3)区间覆盖问题等. 最多不相交区间问题(又叫选择不相交区间,最大不相交覆盖等等),是指数轴上有n个开区间(a,b),选择尽量多个区间 ...

  8. TSP问题解决:模拟退火、贪心法、爬山法,Python实现

    TSP问题解决:模拟退火.贪心法.爬山法,Python实现这里写目录标题 一.TSP问题 二.简单介绍:贪心法.爬山法.模拟退火 三.python代码实现 四.分别用这三种方法得出结果,进行比较 一. ...

  9. 贪心法——区间选点问题

    贪心法--区间选点问题 区间选点问题.数轴上有nn个闭区间[ai,bi][a_i, b_i].取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个). 贪心思想:先按bb从小到大进 ...

最新文章

  1. 记录一次读取hdfs文件时出现的问题java.net.ConnectException: Connection refused
  2. Java简介与HelloWorld第一行代码
  3. Qt元对象QMetaObject的indexOfSlot等函数获取类方法注意问题
  4. mysql无法创建新用户_如何mysql禁止创建新用户
  5. python中模块、函数与各个模块之间的调用
  6. Autofac 依赖注入框架 使用
  7. 高盛也上GitHub了!让交易员赚取10亿美元的神秘“利器” 即将开源
  8. smokeping with tcpping centos 7 环境
  9. VS2017安装教程
  10. iOS亮屏解锁命令【iOS自动化测试】--使用ssh
  11. 项目管理中风险控制的策略
  12. python爬虫——爬取小说
  13. 如何做好工程项目进度管控
  14. C# linq的学习及使用
  15. for…in循环语句应用
  16. 聚英国际|【燎原计划启动周第二期AMA】Filecoin经济模型及热点争议解读
  17. html页面漏斗图,漏斗图 | JShare
  18. latex调整毕业论文目录中章节之间的间距
  19. java 完美洗牌,(2)数组相关算法题目
  20. ffmpeg ffplay 命令收集

热门文章

  1. qt creator源码全方面分析(3-1)
  2. The finally block does not always execute in try finally
  3. Java 基础数据结构介绍
  4. 【Day15】介绍下 promise 的特性、优缺点,内部是如何实现的,动手实现 Promise
  5. C#LeetCode刷题之#447-回旋镖的数量(Number of Boomerangs)
  6. 图表 stack属性_想快速了解MEAN Stack吗? 这是带有有用图表的文档。
  7. 集中和分散架构之间的区别_分散式应用程序架构:后端,安全性和设计模式
  8. 修改webpack配置,在react中使用less
  9. python 硬件自动化测试_村长告诉你:Python实现性能自动化测试竟然如此简单
  10. go语言web开发 排坑指南