部分和问题

来源:互联网 发布:windows串口编程实例 编辑:程序博客网 时间:2024/05/26 05:19

用了bool 型的dfs,而且运用其递归的性质,将其递归后的结果,作为if的判断条件,和找出一个集合的所有子序列相同,只是多出一步将每种集合的总和算出来,而这道题更加节省了代码的长度。

bool 型dfs

#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn=100;int a[maxn];int sum;int n,k;bool dfs(int x,int sum){    if(x==n)        return sum==k;    if (dfs(x+1,sum))//不选这个数       return true;    if(dfs(x+1,sum+a[x]))        return true;    return false;}int main(){    scanf("%d",&n);    for(int i=0;i<n;i++)        scanf("%d",&a[i]);    scanf("%d",&k);    if(dfs(0,0))        printf("Yes");    else        printf("No");    return 0;}


0 0