区间覆盖问题
来源:互联网 发布:网络托管业务 编辑:程序博客网 时间:2024/05/30 23:36
Problem 1230 区间相交问题
Accept: 615 Submit: 1879
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
给定 x 轴上 n 个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。
★算法设计: 对于给定的 n 个闭区间,计算去掉的最少闭区间数。
Input
对于每组输入数据,输入数据的第一行是正整数 n (1<=n<=40,000),表示闭区间数。接下来的 n 行中,每行有 2 个整数,分别表示闭区间的 2 个端点。
Output
输出计算出的去掉的最少闭区间数。
Sample Input
310 2015 1020 15
Sample Output
2
/**此题算是比较经典的区间覆盖问题,由于我当时没有考虑到区间上下限的细节,导致wrong了一次,在给定 x 轴上 n 个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。就是相邻的两个不相交区间留下最短的两个,所以定义一个结构体,分别存放每一个区间的下限和上限(一定要注意下限小于上限要排一下序)然后按区间上限升序排列,区间上限相等时区间下限按降序排列,然后依次选区间就可以了,用n减去被选去的区间,就是没有被选用的区间,涉及到,贪心的思想。*/#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;struct M{ int F; int T;} minSum[40010];bool cmp(const M&a, const M&b){ if(a.T != b.T) return a.T < b.T; return a.F > b.F;}int main(){ int n; while(~scanf("%d",&n)) { for(int i = 0; i < n; i++) { scanf("%d%d",&minSum[i].F,&minSum[i].T); int temp; if(minSum[i].F > minSum[i].T) { temp = minSum[i].F; minSum[i].F = minSum[i].T; minSum[i].T = temp; } } sort(minSum, minSum+n, cmp); int ans = 1,min = minSum[0].T; for(int i = 1; i < n; i++) if(minSum[i].F > min) { ans++; min = minSum[i].T; } printf("%d\n",n - ans); } return 0;}
0 0
- 区间覆盖问题
- 区间覆盖问题
- 区间覆盖问题
- 区间覆盖问题
- 区间覆盖问题(sdut2074
- 区间覆盖问题
- 区间覆盖问题【贪心】
- 区间覆盖问题
- 【区间完全覆盖问题】
- 区间覆盖问题
- 区间覆盖问题 贪心
- 区间覆盖问题
- 贪心 区间覆盖问题
- 区间覆盖问题(贪心)
- 区间覆盖问题
- 区间覆盖问题
- 区间覆盖问题
- 区间覆盖问题 SDUT2074
- rails之distance_of_time_in_words等显示时间差大概描述的方法
- 发布library到Maven仓库
- fifa 15 xbox one coins live quite feints
- 微信支付开发php,微信回调
- iOS GCD各种dispatch
- 区间覆盖问题
- jquery获取select框的值、单选框的值、textarea的值、获取input框的值
- leetCode 97.Interleaving String (交错字符串) 解题思路和方法
- RIFF文件规范
- 日经社説 20150728 高い質を伴うTPP合意の好機逃すな
- Linux下Nagios的安装与配置详解
- HDU 2087 剪花布条
- Java解析XML文档方式一—DOM
- C++学习问题NO.1