2009-03-01 09:38:55來源不明

2007 NOIP 普及組 2.纪念品分组

/************************************************************/

#include<stdio.h>
#include<stdlib.h>
main()
{
 int w,n,a,b,c;
 while(scanf("%d %d",&w,&n)==2)
  {
   int ww[201]={0},temp[30000],flag=0,x,ans=0;
   for(a=0;a<n;a++)
    {
     scanf("%d",&x);
     ww[x]++;
    }
   for(a=0;a<201;a++)        /*展開 這樣就不需要排序法了*/
    {
     if(ww[a]!=0)
      {
       for(b=0;b<ww[a];b++)
        {
         temp[flag]=a;
         flag++;
        }
      }
    }
   for(a=0;a<n;a++)
    {
     if(temp[a]==-1) continue;
     for(b=n-1;b>=0;b--)
      {
       if(temp[b]==-1) continue;
       if(temp[a]+temp[b]<=w)/*順序跟下面的if 不可顛倒*/
        {
         ans++;
         temp[b]=-1;
         temp[a]=-1;
         break;
        }
       if(temp[a]+temp[b]>w)
        {
         ans++;
         temp[b]=-1;
        }
      }
    }
     printf("%d\n",ans);
  }
 return 0;
}