穷举搜索适合数据规模小的情况
判断能否得出某个整数的递归函数:
solve(int i,int m)
{
if(m==0)return true;
if(i>=n)return false;
return solve(i+1,m)||solve(i+1,m-A[i]);
}
ac代码:
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int n,q;
int A[30];
bool solve(int i,int m)
{
if(m==0)return true;
if(i>=n)return false;
return solve(i+1,m)||solve(i+1,m-A[i]);//
}
int main()
{
memset(A,0,sizeof(A));
cin>>n;
for(int i=0;i<n;i++)cin>>A[i];
cin>>q;
for(int i=0;i<q;i++){
int m;
cin>>m;
if(solve(0,m)){
cout<<"yes"<<endl;
}else{
cout<<"no"<<endl;
}
}
return 0;
}