给定证书a1,a2...an,判断是否可以从中选出若干数,使它们的和恰好为k。
限制条件:
1<=n<=20
-10^8<=ai<=10^8
10^8<=k<=10^8
# include <cstdio>
# include <cstdlib>
# include <cmath>
# include <cstring>
# include <string>
# include <iostream>
# include <iomanip>
# include <algorithm>
# include <stack>
# include <vector>
# include <queue>
using namespace std;
int a[21] = { 0 };
int n, k;
bool dfs(int sum,int i)
{
if (i == n)return sum == k;//结束条件
if (dfs(sum, i + 1))return true;
if (dfs(sum += a[i], i + 1))return true;
return false;
}
int main()
{
cin >> n;//输入整数个数n
for (int i = 0; i < n; i++)cin >> a[i];
cin >> k;//输入需要凑的和k
if (dfs(0, 0))cout << "yes" << endl;
else cout << "false" << endl;
}