hdoj1051

Wooden Sticks

|code--------------------------------------------------------------------------------------------------+
|001| /***************************************************************\                              
|002|  *Author: 小呼                                                                               
|003|  *Created Time: Sat 10 Jul 2010 09:56:40 AM CST                                                
|004|  *File Name: b.cpp                                                                             
|005|  *Description:贪心思想,将木棍按l,w排序,先处理第一个木棍,因为         
|006|  *它前面放不下任何其他的木棍了,再依次往后检索是不是有木棍能在它的
|007|  *后面处理而不用花时间setup,这时只需满足w大于它前面的木棍即可,   
|008|  *因为经排序l一定大于前面的木棍,处理过的木棍都作上标记(mark[j]=1) 
|009| \***************************************************************/                              
|010| //*========================*Head File*========================*\\                              
|011|                                                                                                
|012| #include<iostream>                                                                             
|013| #include<stdlib.h>                                                                             
|014| #include<string.h>                                                                             
|015| /*----------------------*Global Variable*----------------------*/                              
|016| int T,n;                                                                                       
|017| bool mark[5001];                                                                               
|018| typedef struct STK{                                                                            
|019| .       int l,w;                                                                               
|020| }STK;                                                                                          
|021| STK S[5001];                                                                                   
|022|                                                                                                
|023| //*=======================*Main Program*=======================*//                             
|024| using namespace std;                                                                           
|025|                                                                                                
|026| int cmp(const void*a,const void* b){                                                           
|027| .       struct STK* c=(STK*)a;                                                                 
|028| .       struct STK* d=(STK*)b;                                                                 
|029| .       return c->l==d->l?c->w-d->w:c->l-d->l;                                                 
|030| }                                                                                              
|031| int main(){                                                                                    
|032| .       //freopen("input","r",stdin);                                                          
|033| .       cin>>T;                                                                                
|034| .       while(T--){                                                                            
|035| .       .       cin>>n;                                                                        
|036| .       .       for(int i=0;i<n;++i)                                                           
|037| .       .         cin>>S[i].l>>S[i].w;                                                         
|038| .       .       qsort(S,n,sizeof(STK),cmp);//排序(先按l,l相同再按w)              
|039| .       .       int sum=0;                                                                     
|040| .       .       memset(mark,0,sizeof(mark));//初始化标记为false                          
|041| .       .       for(int i=0;i<n;++i){                                                          
|042| .       .       .       if(mark[i])continue;//已经处理                                     
|043| .       .       .       sum++;                                                                 
|044| .       .       .       int w=S[i].w;                                                          
|045| .       .       .       for(int j=i+1;j<n;++j){                                                
|046| .       .       .       .       if(mark[j])continue;                                           
|047| .       .       .       .       if(S[j].w>=w){                                                 
|048| .       .       .       .         mark[j]=1;                                                   
|049| .       .       .       .         w=S[j].w;//这句很重要                                   
|050| .       .       .       .       }                                                              
|051| .       .       .       }                                                                      
|052| .       .       .       //mark[i]=1;//这句没必要                                          
|053| .       .       }                                                                              
|054| .       .       cout<<sum<<endl;                                                               
|055| .       }                                                                                      
|056| .       return 0;                                                                              
|057| }                                                                                              
end+--------------------------------------------------------------------------------------------------+


posted @ 2010-07-10 11:11  open source  阅读(251)  评论(0编辑  收藏  举报