官方题解:

 为什么要要求  下一张的纸币面值<=sum+1?

sum为前面所有纸币的和,如果下一张纸币为 sum+2,那么sum+1这一个面值的商品就无法购买。此时跳出循环,小于等于sum的商品均能购买,和m比较一下即可。

///#include<bits/stdc++.h>
///#include<unordered_map>
///#include<unordered_set>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<set>
#include<stack>
#include<map>
#include<new>
#include<vector>
#define MT(a,b) memset(a,b,sizeof(a));
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const double E=2.718281828459;
const int mod=1e9+7;
const int INF=0x3f3f3f3f;

int main()
{
    ll n,m,money[1005],sum=0;
    scanf("%lld %lld",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%lld",&money[i]);
    sort(money+1,money+1+n);
    for(int i=1;i<=n;i++)
    {
        if(money[i]>sum+1)
            break;
        sum+=money[i];
    }
    printf(sum>=m?"YES\n":"NO\n");
    return 0;
}