hdu 1051 Wooden Sticks

这题要用贪心法,先对所有木棒的l或w进行排序并全部标记为0,然后从第一根木棒进行检索,找到符合 l<=l'  w<=w'的木棒并标记为1,检索完一遍以后又从第一个标记为0的木棒开始检索,直到全部标记为1。


#include <stdio.h>
#include <stdlib.h>


struct wood
{
    int l;
    int w;
    int flag;
};
struct wood a[5000+10];
struct wood b[5000+10];

int main()
{
   int t,m,n,i,j,temp,time,count,sum;
   struct wood head;
   scanf("%d",&t);
   while(t--)
   {
       scanf("%d",&n);
       for(i=0;i<n;i++)
       {
           scanf("%d %d",&a[i].l,&a[i].w);
           a[i].flag=0;
       }
       for(i=0;i<n;i++)
       {
        for(j=i+1;j<n;j++)
        {
            if(a[i].l>a[j].l||(a[i].l==a[j].l&&a[i].w>a[j].w))
            {
             temp=a[i].l;
             a[i].l=a[j].l;
             a[j].l=temp;
             temp=a[i].w;
             a[i].w=a[j].w;
             a[j].w=temp;
            }
        }
       }
        time=0;
        head.l=a[0].l;
        head.w=a[0].w;
        a[0].flag=1;
        sum=1;
        do{
           for(i=1;i<n;i++)
           {
            if(a[i].flag==0&&head.l<=a[i].l&&head.w<=a[i].w)
            {a[i].flag=1;
             head.l=a[i].l;
             head.w=a[i].w;
             sum++;}
           }

           time++;
           for(i=0;i<n;i++)
          {
           if(a[i].flag==0)
            {
              head.l=a[i].l;
              head.w=a[i].w;
              break;
            }
          }
         }while(sum!=n);


         printf("%d\n",time);

   }
    return 0;
}


你可能感兴趣的:(hdu 1051 Wooden Sticks)