题意:
思路:
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 25;
const int inf = 0x3f3f3f3f;
int a[N],w[N],ans,n,x,W,mx;
void dfs(int x,int cnt){
if(cnt >= ans) return;
if(x > n){
ans = min(ans,cnt);
return;
}
for(int i = 0;i < cnt;i++){
if(w[i] + a[x] <= W){
w[i] += a[x];
dfs(x + 1,cnt);
w[i] -= a[x];
}
}
w[cnt] = a[x];
dfs(x + 1,cnt + 1);
w[cnt] = 0;
}
int main(){
int t;scanf("%d",&t);
while(t--){
mx = -inf;
scanf("%d%d%d",&n,&x,&W);
for(int i = 1;i <= n;i++){
scanf("%d",a + i);
mx = max(mx,a[i]);
}
if(mx > W){puts("No");continue;}
sort(a + 1,a + 1 + n,greater<int>());
ans = n;
dfs(1,1);
if(ans <= x) puts("Yes");
else puts("No");
}
}