子集和问题---递归搜索
题目描述:
给定n个不同的正整数集合w=(w1,w2,…,wn)和一个正数W,要求找出w的子集s,使该子集中所有元素的和为W。
输入格式:
第一行输入n和W,第二行依次输入n个数。
输出格式:
每行输出一个符合要求的子集。
输入样例1:
4 31
11 13 24 7
输出样例1:
11 13 7
24 7
代码如下:
这题跟我前面写的这题差不多的:递归实现指数型枚举------DFS-CSDN博客
#include <bits/stdc++.h>
using namespace std;
int n,w;
int st[10];//标志数组,0表示未确定。1表示选,2表示不选
int a[100];//存储结果集
int sum=0;//集合中所有元素和void dfs(int k)
{if(k>n){if(sum==w){for(int i=1;i<=n;i++)if(st[i]==1)cout<<a[i]<<" ";cout<<endl;}return ;//要在这里return; }//先选 if(st[k]==0){st[k]=1;sum=sum+a[k];k++;dfs(k);}//回溯 k--;sum=sum-a[k];st[k]=0;//不选 if(st[k]==0){st[k]=2;k++;dfs(k);} //回溯k--;st[k]=0; }
int main()
{cin>>n>>w;for(int i=1;i<=n;i++)cin>>a[i];dfs(1); return 0;
}
希望能帮助到各位同志,谢谢!