#include<stdio.h>
#define N 20
int a[N];
int n,k;
int dfs(int i, int sum);
int main() {
int i;
scanf("%d%d", &n,&k);
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
if(dfs(0, 0)) {
printf("Yes\n");
// printf("");
}
else
printf("No\n");
return 0;
}// 已经从前i项得到了和sum,然后对于i项之后的进行分支
int dfs(int i, int sum) {
// 如果前n项都计算过了,则返回sum是否与k相等
if(i==n) return sum==k; // 不加上a[i]的情况
if(dfs(i+1, sum))
return 1; // 加上a[i]的情况
if(dfs(i+1, sum+a[i]))
return 1; // 无论是否加上a[i]都不能凑成k就返回false
return 0;
}
时间: 2024-11-10 14:45:43