- 题目内容:
给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K。如果可以,输出:“YES”,否则输出"NO"。 - 输入格式:
第1行:2个数N、K, N为数组的长度, K为需要判断的和(2 ≤N ≤ 20,1 ≤ K ≤ 10^9)
第2 到第 N + 1行:每行1个数,对应数组的元素A[i] (1 ≤ A[i]≤ 10^6) - 输出格式:
如果可以,输出:“YES”,否则输出"NO"。 - 样例输入
4 13
1
2
4
7
- 样例输出
YES
- 输入样例:
5 9
1
2
3
4
5
- 输出样例:
YES
时间限制:500ms内存限制:32000kb
#include <iostream>
#define MAX 1000
using namespace std;
int num[MAX];
int n,k;
int cursum = 0;
int backtrack(int t){
if(t == n || cursum > k)
return 0;
else{
cursum += num[t];
if(cursum == k)
return 1;
if(backtrack(t+1))
return 1;
cursum -= num[t];
if(backtrack(t+1))
return 1;
return 0;
}
}
int main()
{
cin >> n >> k;
for(int i = 0;i < n;i++)
cin >> num[i];
if(backtrack(0))
cout << "YES";
else
cout << "NO";
return 0;
}