给定整数a1丶a2丶...丶an判断是否可以从中选出若干数,使它们的和恰好为K。
限定条件 1<=n<=20 -1e8<=ai<=1e8 -1e8<=k<=1e8
样例
输入
4
1
2
4
7
13
输出
Yes
输入
4
1
2
4
7
输出
No
深度优先搜索 是按照从上到下一路搜索到底 如果没有就返回初始从另一条路直接搜索
这一题的思路其实就两个一个是i+1 总和不加 一个是i+1总和加a【i】
具体看代码 我觉得用bool有点秒啊
#include <bits/stdc++.h>
using namespace std;
int a[100000000];
int n,k,m;
bool dfs(int i,int sum)
{
if(sum==k) return true;
if(i==n) return sum==k;
if(dfs(i+1,sum+a[i])) return true;
if(dfs(i+1,sum)) return true;
return false;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cin>>k;
if(dfs(0,0)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}