部分和问题
给定整数a1、a2、…、an,
判断是否可以从中选出若干数,使它们的和恰好为K。
1<=n<=20,-1e8<=ai<=1e8,-1e8<=k<=1e8
#include <iostream>
using namespace std;
/**部分和问题
*给定整数a1、a2、...、an,
*判断是否可以从中选出若干数,使它们的和恰好为K。
*1<=n<=20,-1e8<=ai<=1e8,-1e8<=k<=1e8
*/
const int MAX_N=25;
int a[MAX_N];
int 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+1])){
return true;
}
return false;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>k;
if(dfs(0,0)){
cout<<"Yes";
}else{
cout<<"No";
}
return 0;
}