//给定整数a1,a2,a3........判断是否可以从中选出若干数,使它们的和恰好为k
//input
// n=4
// a={1,2,4,7}
// k=13
#include "iostream"
using namespace std;
const int MAX_N=1000;
int n,k;
int a[MAX_N];
bool dfs(int i,int sum)
{
if(i==n) return sum==k;
if(dfs(i+1,sum)) return true;
if(dfs(i+1,sum+a[i])) return true;
return false;
}
void solve()
{
if(dfs(0,0))
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
int main(int argc, char const *argv[])
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cin>>k;
solve();
return 0;
}
将i=0看作起始状态,对于每一个i状态都存在取ai或不取ai两种状态
当搜索到sum==k时或所有状态都遍历完时终止