问题是 给你a1到an的所有数字,让你找到和为k的情况有没有可能存在。
分析:
每一个数字都有加或者不加的情况,所以用深度搜索把所有情况都遍历一下即可
代码如下:
#include<iostream> using namespace std; #define Max_n 100000 int a[Max_n],n,k; 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() { while(cin>>n) { int i; for(i=0;i<n;i++) cin>>a[i]; cin>>k; solve(); } return 0; }