感受

思路






图片说明

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 3e5 + 10;
const ll mod = 998244353;
int n, x;
ll w, use[50], a[50];
bool ok;
bool cmp(ll b, ll c){
    return b > c;
}
void dfs(int pos){
    if(pos == n + 1) ok = true;
    if(ok) return ;
    for(int i = 1; i <= min(pos, x); i++){
        if(use[i] + a[pos] > w) continue;
        use[i] += a[pos];
        dfs(pos + 1);
        use[i] -= a[pos];
    }
}
int main(){
    int t;
    scanf("%d", &t);
    while(t--){
        ok = false;
        scanf("%d%d%lld", &n, &x, &w); x = min(x, n);
        for(int i = 1; i <= n; i++) scanf("%lld", &a[i]), use[i] = 0;
        sort(a + 1, a + n + 1, cmp);
        dfs(1);
        if(ok) puts("Yes");
        else puts("No");
    }
    return 0;
}