记录编号 |
7159 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2007]纪念品分组 |
最终得分 |
100 |
用户昵称 |
BYVoid |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.144 s |
提交时间 |
2008-11-06 21:17:46 |
内存使用 |
0.49 MiB |
显示代码纯文本
#include <iostream>
using namespace std;
const int INF=0x7FFFFFFF;
template <typename T,int MAX,int OV> class tHeap
{
public:
T heap[MAX];
int Size;
tHeap()
{
Size=0;
heap[0]=OV;
}
void ins(T p)
{
int k=++Size,f;
f=k/2;
while (heap[f] > p )
{
heap[k]=heap[f];
k=f;
f=k/2;
}
heap[k]=p;
}
T del()
{
T v=heap[1];
int k=1,child;
child=k*2;
while (child<=Size)
{
if (child+1<=Size && heap[child+1]<heap[child])
child++;
if (heap[child] < heap[Size])
{
heap[k]=heap[child];
k=child;
child=k*2;
}
else
break;
}
heap[k]=heap[Size--];
return v;
}
};
tHeap<int,30001,-INF> H;
int S[30001];
void group()
{
int i,j,N,W,a,Ans=0;
freopen("group.in","r",stdin);
freopen("group.out","w",stdout);
scanf("%d%d",&W,&N);
for (i=1;i<=N;i++)
{
scanf("%d",&a);
H.ins(a);
}
for (i=1;i<=N;i++)
{
S[i]=H.del();
}
for (i=1,j=N;i<=j;)
{
if (S[i]+S[j]<=W && i!=j)
{
i++;j--;
Ans++;
}
else
{
j--;
Ans++;
}
}
cout << Ans;
}
int main()
{
group();
return 0;
}