东东的女朋友(二)【贪心】+【区间覆盖】

来源:互联网 发布:雷蛇云驱动网络不可用 编辑:程序博客网 时间:2024/05/21 19:41

1210: 东东的女朋友(二)

SubmitStatusWeb Board

Description

我们已经知道了,东东有很多的女朋友。每个女朋友都要东东陪她们,但是现在东东的女朋们每天也都需要上课,所以不可能一整天都有时间。现在的问题是,给出东东女朋友每一天的空闲时间,问东东最少用多少天可以陪每个女朋友至少一次。因为东东还要留很多时间来学习算法呢。当然当东东在陪一个女朋友时间段内不可以同时去陪另一个女朋友。

Input

第一个数t表示有t组测试实例,每组测试实例的第一个数n(n<=100)表示东东有n个女朋友。接下来的n行,每行有两个数s,e表示东东的女朋友的空闲时间的起始时间和终止时间(0 < s<=e<=24)。

Output

输出东东所需要的最少的天数来陪他的女朋友们

Sample Input

131 82 34 7

Sample Output

2

思路 :  首先看到,问题是最小,想到可能是贪心,又给了一连串的区间,这个题是用区间覆盖求的(就是贪心区间);  这是一类题型,
贪心区间的;  刚开始 感觉这个和那个 会场安排活动的 (典型的贪心的)的题型好像,其实不然,仔细想想就能够发现其中的区别, 区别就是在于 当区间有重叠的时候怎么处理; 处理的不同,类型也就不同; 比如 本题,虽然区间1和区间2重叠,但是区间2 并没有删去,而是 等到之后再用,反正这些重叠的都要用到。;但是对于会场安排活动的那题,区间1和区间2重叠的时候,区间2 是要删去的,之后也不用。

代码 : 
#include<stdio.h>
#include<algorithm>
#define M 24+2  // 把握好这个 区间
using namespace std;
int cmp(int x,int y)
{
return x>y;
}
int main( )
{
int t;scanf("%d",&t);
while(t--)
{
int map[M]={0};int m;
int s,e;scanf("%d",&m);
for(int j=0;j<m;j++)
{
scanf("%d%d",&s,&e);
for(int i=s;i<=e;i++)
{
map[i]++;
}
}

sort(map,map+M,cmp);
printf("%d\n",map[0]);
}
return 0;
}
0 0
原创粉丝点击