给定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
参考代码:
#include<iostream>
using namespace std;
int n,w,a[100],sum,t[100];
void dfs(int u)
{
if(u==n)
{
if(sum==w)
{
for(int i=0;i<n;i++) if(t[i]) cout<<a[i]<<" ";
cout<<endl;
}
return ;
}
else
{
sum+=a[u];
t[u]=1;
dfs(u+1);
t[u]=0;
sum-=a[u];
dfs(u+1);
}
}
int main()
{
cin>>n>>w;
for(int i=0;i<n;i++) cin>>a[i];
dfs(0);
return 0;
}