数据结构作业——青子的生日

Description

青子的生日快到了,快斗计划着带青子去游乐场玩。游乐场有好多游戏项目,每个游戏项目都有自己的开始和结束时间。同一时间只能玩一个游戏,前一个游戏结束后可以马上开始下一个游戏。为了让青子过一个愉快的生日,快斗决定带青子玩尽可能多的游戏。因为青子是个从不半途而废的女孩,所以他们必须完整地玩完选择的每个游戏。

Input

输入第一行为一个正整数 n(1<=n<=100) ,表示可供选择的游戏项目数。
然后是 n 行数据。每行包括 2 个数据 Ti_s,Ti_e (1<=i<=n),分别表示第 i个游戏项目的开始和结束时间(Ti_s<Ti_e,范围均在 int 内) ,为了简化问题,每个时间都用一个正整数表示。

Output

输出最多能完整玩完的游戏项目数。

Sample Input

41
2
2 3
3 4
4 5

Sample Output

4

思路

区间调度问题,要使得能完整玩完的游戏项目数最多,那么应该贪心的选取时间结束越早的游戏,因为结束时间越早,那么之后可选的游戏就相应越多。

 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = 105;
struct Node{
	int first,second;
}node[maxn];

bool cmp(struct Node x,struct Node y)
{
	return x.second < y.second;
}

int main()
{
	int N,i;
	while (~scanf("%d",&N))
	{
		for (i = 0;i < N;i++)
		{
			scanf("%d%d",&node[i].first,&node[i].second);
		}
		sort(node,node+N,cmp);
		int ans = 0,t = 0;
		for (i = 0;i < N;i++)
		{
			if (t <= node[i].first)
			{
				ans++;
				t = node[i].second;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
} 

  

posted @ 2016-12-01 22:27  zxzhang  阅读(313)  评论(0编辑  收藏  举报