#include <bits/stdc++.h>
using namespace std;
const int max_n = 35;
int val[max_n];
int used[max_n];
int m, n, k;
bool ok = false;
void dfs(int sum, int num, int idx) {
if(sum == m && num == k) {//刚好满足条件
ok = true;
return;
}
for(int i = idx; i >= 0; --i) {
if(!used[i] && sum + val[i] <= m && num + 1 <= k ) {
used[i] = 1;
sum += val[i];
num++;
dfs(sum, num, i-1);
used[i] = 0;
sum -= val[i];
num--;
}
}
}
int main() {
//freopen("data.in", "r", stdin);
memset(used, 0, sizeof(used));
memset(val, 0, sizeof(val));
scanf("%d %d %d", &m, &n, &k);
for(int i = 0; i < n; ++i) {
scanf("%d", &val[i]);
}
sort(val, val+n);//从小到大排列
dfs(0, 0, n-1);
if(ok)
printf("Yes\n");
else
printf("No\n");
return 0;
}
计蒜客 买书(dfs搜索)
最新推荐文章于 2023-09-15 17:17:50 发布