HDU 2037 今年暑假AC 赤裸裸的 贪心
时间:2011-04-11 来源:Lvsi
这道题是一道赤裸裸的贪心题,在这以前我只是看了贪心的思想,还没实现过,今天看了别人这道题代码才知道AC的代码原来是这样写的,小小水一下;
这是一道典型的贪心算法,只要每一步都选占用时间最小的同时要使剩余时间最大的,也就是说,没一会你都要找一个结束最早的.当你找到第一个后,一定要使剩余的时间最长,以后每选一个都要考虑这个问题,这样你每一步都最优的话,结果也是最优的;
具体做法就是先按结束的时间进行排序,然后每次取最小的,但是要保证和前面取的那个没有冲突
#include<stdio.h> #include<stdlib.h> struct r { int s,e; }act[124]; int n,count; int cmp( const void *a , const void *b ) { return ( ( r * ) a ) -> e - ( ( r * ) b ) ->e; } int main( ) { while( scanf( "%d",&n ),n ) { for( int i = 0; i < n; ++i ) scanf( "%d%d",&act[i].s,&act[i].e ); qsort( act,n,sizeof( act[0] ),cmp ); for( int i = count = 1,k = 0; i < n; ++i ) if( act[i].s >= act[k].e ) { ++count; k = i; } printf( "%d\n",count ); } return 0; }
相关阅读 更多 +