解题报告:
题目大意:有若干的节目,现在知道节目开始的时间和结束的时间,问题是求最多可以看多少个完整的节目。
贪心题,想要在固定的时间内看尽量多的节目就必须保证看每个节目的时候都要尽可能快的结束当前这个节目,以便尽快看下一个节目。具体贪心的思想就是首先将所有的节目按照结束的时间从早到晚排一次序,然后定义一个时间指针,指向当前的时间,然后将开始时间距离当前时间最近的那个的那个节目看掉,因为已经按照节目结束的时间进行排过序 了,所以不用考虑选择当前时间以后的哪一个节目的问题。当当前时间指针移动到了结束时间最晚的那个节目的结束的时间时,便结束循环。
1 #include<cstdio> 2 #include<algorithm> 3 struct node { 4 int sta,end; 5 }list[100+5]; 6 bool cmp(node a,node b) { 7 return (a.end<b.end); 8 } 9 int main() { 10 int n; 11 while(scanf("%d",&n)&&n!=0) { 12 for(int i=1;i<=n;++i) 13 scanf("%d%d",&list[i].sta,&list[i].end); 14 std::sort(list+1,list+n+1,cmp); 15 int now=0,sum=0; 16 for(int i=1;i<=n;++i) 17 if(list[i].sta>=now) { 18 sum++; 19 now=list[i].end; 20 } 21 printf("%d\n",sum); 22 } 23 return 0; 24 }