Problem Description
请编程完成以下任务:
1.从文件中读取闭区间的个数及它们的描述;
2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。
1.从文件中读取闭区间的个数及它们的描述;
2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。
Input
输入有多组数据,每组数据的首行包括区间的数目n,1<=n<=10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0<=a<=b<=10000,它们是某一个区间的开始值和结束值。
Output
对于每组数据找到对于每一个区间都至少有一个整数属于该区间,且集合所包含元素数目最少,输出该集合的元素个数。
Sample Input
4 3 6 2 4 0 2 4 7
Sample Output
2
//此题与活动选择的解法一样 #include<iostream> #include<cstdio> using namespace std; int c[10010]; struct input{ int x,y; }a[10010]; int main() { //freopen("a.txt","r",stdin); int n,i,j,max,t; while(scanf("%d",&n)!=EOF) { max=0; for(i=1;i<=n;i++) { scanf("%d %d",&a[i].x,&a[i].y); c[i]=1; } for(i=1;i<n;i++) for(j=i+1;j<=n;j++) if(a[i].x>a[j].x) { t=a[i].x; a[i].x=a[j].x; a[j].x=t; t=a[i].y; a[i].y=a[j].y; a[j].y=t; } for(i=2;i<=n;i++) for(j=1;j<i;j++) if(a[j].y<a[i].x&&c[i]<c[j]+1) c[i]=c[j]+1; for(i=1;i<=n;i++) if(max<c[i]) max=c[i]; printf("%d\n",max); } return 0; }