贪心之活动选择问题
将活动按照结束时间单调递增排序
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct node { int b,e; }a[1000],temp; int cmp(node x,node y) { return x.e<y.e; } int main() { int i,j,n,p,q,x; while(~scanf("%d",&n)) { int count=0; for(i=0;i<n;i++) scanf("%d%d",&a[i].b,&a[i].e); sort(a,a+n,cmp); x=a[0].e; for(j=1;j<n;j++) { if(a[j].b>=x) //如果开始时间等于前一个结束时间,就可以举办 { count++; x=a[j].e; } } printf("%d\n",count+1); //+1是因为,x是从第一个结束时间开始的,那么他肯定举办了第一次 } return 0; } /** 5 1 3 2 5 4 7 6 9 8 10 **/