[2007年NOIP普及组] 纪念品分组

[2007年NOIP普及组] 纪念品分组

思路:运用贪心算法。将纪念品按价格排序,然后一前一后两两组队,如果没有超过上限w,就组队成功;反之,就失败,较大的一个单独成一组,较小的再等别的来组队。最后输出总队数。

代码如下:

#include<bits/stdc++.h>

using namespace std;

int n,w,i,a[30010],s=0,j;

int main()

{

  cin>>w>>n;

  for(i=1;i<=n;i++)

    cin>>a[i];

  sort(a+1,a+n+1,greater<int>());//降序排列

  int bj=n;

  for(i=1;i<=n;i++)

   { if(a[i]==0)//特殊情况

      break;

  if(i==bj)//当只剩最后一个时

  {

   s++;

   break;

  }

  if(a[i]+a[bj]<=w)//可以两个一组时

   {

   a[i]=0;

   a[bj]=0;

   s++;

   bj--;

   }

  else//一个一组

   {

   a[i]=0;//让较大的为一组

   s++;

   }

  }

  cout<<s;

}

posted @ 2022-08-16 11:45  shanyingrui  阅读(335)  评论(0编辑  收藏  举报