C Program
#include<stdio.h>
void makeheap(int x[],int n)
{
int i,j,k,t;
for(i=1;i<n;i++)
{
k=i;
while(k>0)
{
j=(k-1)/2;
if(x[j]<x[k])
{
t=x[j]; x[j]=x[k]; x[k]=t;
k=j;
}
else break;
}
}
}
void heapsort(int x[],int n)
{
int i,j,t;
makeheap(x,n);
for(i=n-1;i>0;i--)
{
t=x[0]; x[0]=x[i]; x[i]=t;
j=0;
while(2*j+1<i)
{
int l=2*j+1,r=l+1,m=l;
if(r<i && x[r]>x[l]) m=r;
if(x[j]<x[m])
{
t=x[j]; x[j]=x[m]; x[m]=t;
j=m;
}
else break;
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,b,i,count=0;
scanf("%d %d",&n,&b);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
makeheap(a,n);
heapsort(a,n);
for(i=0;i<n;i++)
{
if(b>=a[i])
{
b-=a[i];
count++;
}
else break;
}
printf("%d\n",count);
}
return 0;
}
0 Comments