#5800. 子集和判定
子集和判定
题目:子集和判定(Subset Sum - YES/NO)
题目描述
给定一个长度为 n 的整数数组 a,你可以从中选择若干个元素(每个元素最多选一次,也可以一个都不选),问是否存在一种选择方式,使得所选元素之和 恰好等于 S。
如果存在,输出 YES;否则输出 NO。
输入格式
第一行输入两个整数 n 和 S。
第二行输入 n 个整数 a0, a1, ..., a(n-1)。
输出格式
输出一行:
- 若存在子集的和为
S,输出YES - 否则输出
NO
数据范围(可用于 OJ)
1 ≤ n ≤ 25-10^9 ≤ a[i] ≤ 10^9-10^9 ≤ S ≤ 10^9
说明:n ≤ 25 暗示可以使用 DFS / 回溯(枚举子集)完成。
样例输入 1
5 9
2 4 6 3 5
样例输出 1
YES
解释:选择 4 + 5 = 9。
样例输入 2
4 7
1 2 4 8
样例输出 2
NO
提示
这是一道经典的“子集枚举”题:每个元素只有两种状态——选 / 不选,因此总方案数是 2^n。当 n ≤ 25 时,这样做是可行的。