有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动?
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define N 10000
4 /*
5 @活动安排问题
6 @作者:hjf
7 */
8 void greed(struAcvity a[],int n);
9 void sort(struAcvity a[],int n);
10 struct activity
11 {
12 int st;
13 int ft;
14 int Ans;
15 };
16 typedef struct activity struAcvity;
17 int main()
18 {
19 int n,i,j,cnt=0;
20 scanf("%d",&n);
21 struAcvity a[n];
22 for(i=0;i<n;i++)
23 scanf("%d %d",&a[i].st,&a[i].ft);
24 greed(a, n);
25 //printf("%d\n%d\n%d\n%d\n",a[0].ft,a[1].ft,a[2].ft,a[3].ft);
26 for(j=0;j<n;j++)
27 if(a[j].Ans==1)
28 cnt++;
29 printf("%d",cnt);
30 return 0;
31 }
32 void greed(struAcvity a[],int n)
33 {
34 int i,j,fData=1000,sData;
35 for(i=0;i<n;i++)
36 {
37 a[i].Ans=0;
38 if(a[i].ft<fData)
39 fData=a[i].ft;
40 }
41 sort(a,n);//printf("%d\n",fData);
42 for(i=0;i<n;i++)
43 {
44 if(a[i].st>=fData||a[i].ft==fData)
45 {
46 a[i].Ans=1;
47 fData=a[i].ft;
48 }
49 }
50
51 }
52 void sort(struAcvity a[],int n)
53 {
54 int i,j,minftIndex;
55 struAcvity temp;
56 for(i=0;i<n-1;i++)
57 {
58 minftIndex=i;
59 for(j=i+1;j<n;j++)
60 if(a[minftIndex].ft>a[j].ft)
61 minftIndex=j;
62 if(minftIndex!=i)
63 {
64 temp=a[minftIndex];
65 a[minftIndex]=a[i];
66 a[i]=temp;
67 }
68 }
69 }