数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。

输入格式:

第一行一个数字n,表示有n个闭区间。 下面n行,每行包含2个数字,表示闭区间[ai, bi]

输出格式:

一个整数,表示至少需要几个点

输入样例:

在这里给出一组输入。例如:

3
1 3
2 4
5 6

输出样例:

在这里给出相应的输出。例如:

2

思考过程:

  • 如果一个点取在交集内,那么该点所占的区间更多
  • 看看三种最基本的情况:

  • 那么怎样最可能找到交集呢? 如上图,我们需要将右端点从小到大排序的同时使得在右端点相同的情况下,左端点越大越好(这样更可能优先遇到交集)
  • 接下来怎样取点呢?仔细想想,经过上面一番排序之后,我们如果取右端点会使总的点数更少实际操作:设置一个标志位 f,每次将本区间的左端点同标志位作比较,这样是为了考虑要不要增加点(标志位会在本区间的左端点大于 f 的时候更新为本区间的右端点),不理解可以参考上面图一,实际上不管哪种情况增加点都可以简化为图一。

c++代码实现:

#include <iostream>
#include <algorithm>
using namespace std;struct SEC //每个区间
{int left;int right;
};bool cmp(SEC s1, SEC s2)
{if (s1.right == s2.right) return s1.left > s2.left;else return s1.right < s2.right;
}int main()
{int n, f = -1000000, ans = 0; //f是标志位cin >> n;SEC sections[n];for (int i = 0; i < n; i++){cin >> sections[i].left >> sections[i].right;}sort(sections, sections + n, cmp); //将右端点从小到大排序for (int i = 0; i < n; i++){if (sections[i].left > f) //将本区间的左端点和上一区间的右端点作比较{f = sections[i].right;ans++;}}cout << ans;return 0;
}

大家要是觉得有帮助就点个赞吧~

选点问题(贪心算法)相关推荐

  1. 区间选点acwing905(贪心算法)

    给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点. 输出选择的点的最小数量. 位于区间端点上的点也算作区间内. 输入格式 第一行包含整数 N,表示区间 ...

  2. 贪心算法——区间选点问题

    转载:https://blog.csdn.net/xia842655187/article/details/51944763 区间选点的问题大致可以描述为:  给定N个区间[a,b],取尽量少的点,使 ...

  3. 基础算法 —— 贪心算法

    [概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...

  4. 贪心算法—建立雷达(POJ 1328)

    贪心算法--区间选点问题 这也是贪心算法的经典问题,一般情况为:有n个闭区间[ai,bj],取尽量少的点,使得每个区间内都至少有一个点. 分析 如果区间i内已经有一个点被取到,则称此区间已经被满足. ...

  5. 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题...

    1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1, ...

  6. 【信息学奥赛一本通 提高组】第一章 贪心算法

    一.贪心算法的特点: 1.贪心选择: 所谓贪心选择是指应用同一规则,将原问题变为一个相似的但规模更小的子问题,而后的每一步都是当前看似最佳的选择,且这种选择只依赖于已做出的选择,不依赖未做出的选择. ...

  7. 贪心算法之区间取点问题

    贪心算法之区间取点问题 题目描述: Assume the coasting is an infinite straight line. Land is in one side of coasting, ...

  8. 算法小课堂(五)贪心算法

    一.概述 贪心算法是一种常见的算法思想,用于解决优化问题.其基本思想是在每一步选择中都采取当前状态下最优的选择,从而希望能够获得全局最优解. 具体来说,贪心算法通常分为以下步骤: 定义问题的最优解,通 ...

  9. 扔掉你的算法书!1小时零基础拿下贪心算法!(17道题+万字儿童级解析+数十张图解)

    前几天的文章中我写到了一些关于零基础学习回溯算法的一些步骤和细节,在刷题的过程中发现了很多贪心算法的题很有趣,于是今天他来了,准备了好17道题来供大家共同学习,并附上了十分详细的题解,与附带了注释的优 ...

  10. 算法学习--动态规划与贪心算法

    动态规划与贪心算法都是一种递推算法,都是用局部最优解来推导全局最优解:是对遍历解空间的一种优化:当问题具有最优子结构时,可以用动态规划来解决,而贪心算法是动态规划的特例 动态规划 1. 动态规划的思想 ...

最新文章

  1. 怎么在云服务器上建网站_云服务器怎么做安全维护
  2. 检测和测试停滞的流– RxJava常见问题解答
  3. flash builder4.7 for Mac升级AIRSDK详解
  4. python安装Scrapy踩过的坑以及安装指导
  5. synchronized底层是如何实现的?
  6. java jni技术_JNI技术简介
  7. Socket 编程,一个服务器,多个客户端,互相通信
  8. 深度分析Spring中的构造器注入
  9. 【Spring第十篇】Spring整合Mybatis
  10. MongoDB数据插入insert和save操作
  11. 高电平复位还是低电平复位?
  12. 哪些方面的纠纷可以去北京互联网法院提起诉讼?
  13. 微信小程序之布局切换
  14. python中文文本信息提取_PyMuPDF提取文本信息
  15. python里面的平方怎么打出来_python平方符号
  16. c语言报告反思,c语言教学的反思.pdf
  17. [转]应对新劳动法:华为万名员工“自愿”辞职[http://news.qq.com/a/20071030/001675.htm]
  18. html 百度天气,百度天气预报api
  19. 漫话:如何给女朋友解释什么是语法糖?
  20. 安卓日志系统初探(带你了解Android日志系统的概貌)

热门文章

  1. python 正则表达式
  2. Java中如何使用帮助文档(API)
  3. 美国银行账户里的美元(目前大概每月有五六万),有什么更好的办法转到国内的人民币账户上?
  4. 企业微信客户端开启开发者模式
  5. 用js进行日期的加减
  6. osi七层模型_4、OSI七层模型简介
  7. Linux系统管理上机作业2
  8. python | 自动化exe程序
  9. 安卓开发仿有道词典和谷歌翻译词典软件在线输入翻译源码下载
  10. verilog 中的冒泡排序法