区间重叠问题:
问题描述:
给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重叠),问小杰最多可以看多少部电影。
贪心解法:
将所有的电影按结束时间从小到大排序,第一步选结束的时间最早的那部电影。然后,每步都选和上一步选中的电影不冲突且结束时间最早的电影。
输入:
先输入n(n<=100),表示n场电影,接下来n行,每行两个整数(均小于1000)表示一场电影的放映区间。
输出:
对每组数据输出最多能看几部电影。
样例输入:
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
样例输出:
5
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
const double eps=1e-6;
struct ti{
int start;
int end;
}tm[110];
bool cmp(ti a,ti b)
{
return (a.end<b.end);
}
int main()
{
int n;
int i;
int num=1;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&tm[i].start,&tm[i].end);
}
sort(tm,tm+n,cmp);
int endtime=tm[0].end;
for(i=1;i<n;i++)
{
if(tm[i].start>=endtime)
{
endtime=tm[i].end;
num++;
}
}
printf("%d",num);
return 0;
}