这段时间一直在忙实验室的事情,好长时间没有写题了,HDOJ 11页有一些水题,这几天又刷了刷,不过感觉HDOJ 2037这道题还是不错的.总的思想是贪心算法.开始我的思想比网上的要麻烦一些,我是把所有数都按照第一位排序,然后找重叠的区间,后来发现网上的题解有更简单的方法,就是把所有数按第二位排序然后比较前一个数的末尾和后一个数的首位,贪心算法果然博大精深.....
#include <stdio.h>
#include <iostream>
#define MAX 1000
using namespace std;
typedef struct
{
int a;
int b;
}S;
int main()
{
S num[MAX];
int N, sum, temp, i , j;
while( scanf( "%d", &N ) && N )
{
for( i = 0; i < N; i++ )
{
scanf( "%d%d", &num[i].a, &num[i].b );
}
for( i = 0; i < N; i++ )
for( j = i+1; j < N; j++ )
if( num[i].b > num[j].b )
{
temp = num[i].a;
num[i].a = num[j].a;
num[j].a = temp;
temp = num[i].b;
num[i].b = num[j].b;
num[j].b = temp;
}
sum = 1;
for( j = 0, i = 0; i < N, j < N; j++ )
if( num[i].b <= num[j].a )
{
sum++;
i = j;
}
printf( "%d\n", sum );
}
return 0;
}