#include <iostream>
using namespace std;
#include <cstdio>
#include <algorithm>
long long a[20010];
int N;
long long B;
bool cmp(const long long x1, const long long x2);
int main(){
cin >> N >> B;
for(int i = 0; i < N; i++)
scanf("%lld", &a[i]);
sort(a, a + N, cmp);
long long sum = 0;
int cnt = 0;
for(int i = 0; i < N; i++){
sum += a[i];
cnt++;
if(sum >= B)
break;
}
cout << cnt << endl;
return 0;
}
AC代码的cmp:
bool cmp(const long long x1, const long long x2){
return x1 > x2;
}
85分的:
bool cmp(const long long x1, const long long x2){
return x1 >= x2;
}
我的理解(85分)是如果x1与x2相等,那么没必要把x1移到x2后面(这种想法默认在比较时x1在前,如果二者相等就维持了原有顺序)
我发现在第10个测试点(20000头大象),如果用下面的cmp会使得a[0]为0,从a[1]开始降序排列,这是为什么呢?