#include<stdio.h>
#include<stdlib.h>
int cmp(void *a,void *b)
{
int x,y;
x=*(int *)a;
y=*(int *)b;
if(x>y)return -1;
if(x<y)return 1;
return 0;
}
int main(void)
{
int n,h,sum=0;
scanf("%d%d",&n,&h);
int a[n];
for(int i=0;i<n;i++)scanf("%d",&a[i]);
qsort(a,n,sizeof(*a),cmp);
for(int i=1;i<=n;i++){
sum+=a[i];
if(sum>=h){
printf("%d",i);
break;
}
}
}
给的数据比较大看不出错哪了,不知道是不是思路有问题。我就是先倒序,再求和,高度到了就输出i并break