从给定整数 a1,a2,a3...an ,判断是否可以从中选出若干数,使他们的和恰好为k。
#include <cstdio>
#include <cstdlib>
using namespace std;
const int Maxn = 21;
int a[Maxn];
int n,k;
bool dfs(int k, int i){
if(i==n){
return k==0;
}
return (dfs(k-a[i], i+1) | dfs(k,i+1));
}
int main()
{
scanf("%d %d", &n,&k);
for(int i=0; i<n; ++i){
scanf("%d", &a[i]);
}
printf("%d\n", dfs(k,0));
return 0;
}
深度优先搜索
时间复杂度为
O(2n)
因此可以用于当n较小时候的情况。