#include <iostream>
using namespace std;
int A[30] = {0}; //保存相关元素
int N; //数组长度
int K; //要进行判断的和
bool dfs(int i, int sum)
{
if(i == N)
{
return sum == K;
}
if(dfs(i+1, sum)) return true; //不取下一个数的情况
if(dfs(i+1, sum+A[i])) return true; //取下一个数的情况
return false;
}
int main()
{
cin >> N >> K;
//初始化元素数组
for(int i=0; i<N; i++)
{
cin >> A[i];
}
bool ans = dfs(0, 0);
if(ans)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
return 0;
}
对于每一个数字,都需要考虑“取”或者“不取”这两种情况,这就用到了“穷竭搜索”的思想,所有情况都暴力考虑一遍,如果对复杂度要求不是很高,这种算法写起来可以接受。