51Nod_1268 和为K的组合
http://www.51nod.com/Challenge/Problem.html#!#problemId=1268
题目
给出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"。
样例输入
5 13
2
4
6
8
10
样例输出
No
分析
由于N较小,因此可暴力深搜。
C++程序
#include<iostream>
using namespace std;
typedef long long ll;
const int N=21;
int a[N];
bool flag=false;
int n,k;
void dfs(int i,ll sum)
{
if(sum==k)
{
flag=true;
return;
}
if(flag||i==n)
return;
dfs(i+1,sum+a[i]);
dfs(i+1,sum);
}
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>a[i];
dfs(0,0);
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
}