典型的贪心算法。

思路: 每次都选择结束时间最早的节目 , 同时下一个节目的时间要与上一个节目结束时间相同或者在上一个节目结束时间之后。

Tips: 贪心算法是在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

 

#include<stdio.h>
#define N 101
struct time
{
	int start , end;
};
int main()
{
	struct time a[N] , temp;
	int n , flag , ans = 0;

	while(scanf("%d" , &n) && n)
	{
		for(int i=0; i<n; i++)
			scanf("%d%d" , &a[i].start , &a[i].end);
	
		for(int i=0; i<n; i++)
		{
			flag = 1;
			for(int j=0; j<n-i-1; j++)
				if((a[j].end > a[j+1].end) || (a[j].end == a[j+1].end && a[j].start > a[j+1].start))
				temp = a[j] , a[j] = a[j+1] , a[j+1] = temp , flag = 0;
			if(flag)	break;
		}

		temp = a[0];
		for(int i=1; i<n; i++)
			if(a[i].start >= temp.end)
				ans++ , temp = a[i];

		printf("%d\n" , ans + 1);
		ans = 0;
	}

	return 0;
}
posted on 2017-12-31 20:04  23~  阅读(178)  评论(0)    收藏  举报