输入n个数,这几个数中的数是否能够使和为k
#include <iostream>
using namespace std;
//输入n个数,这几个数中的数是否能够使和为k
int a[100];
int n,k;
//能够从这个函数了解到计算到第i个数时,当前总和为sum时,是否能够使最后和为k
bool dfs(int i,int sum){
if(i==n) return sum==k; //和已经是k了,可以!
if(dfs(i+1,sum)) return true; //不算a[i]的情况下
if(dfs(i+1,sum+a[i])) return true; //算上a[i]
return false;
}
void solve(){
if(dfs(0,0)) printf("yes");
else printf("no");
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
cin>>k;
solve();
return 0;
}
本文介绍了一个子集求和问题的解决方案,通过递归深度优先搜索(DFS)的方法判断一组整数中是否存在子集的元素之和等于给定的目标值k。该文详细展示了如何使用C++编程语言实现这一算法。
916

被折叠的 条评论
为什么被折叠?



