#include<bits/stdc++.h>
using namespace std;
int n,m,cnt=0,sum=0;
void dfs(int i,int sum,int a[],int b[],int rw)
{
if(i>=n)
return;
else
{
if(sum+a[i]<=m)
{
b[i]=1;
if(sum+a[i]==m)
{
for(int i=0;i<n;i++)
{
if(b[i]==1)
cout<<a[i]<<" ";
}
cnt++;
exit(0);
return;
}
dfs(i+1,sum+a[i],a,b,rw-a[i]);
}
if(sum+rw-a[i>=m])
{
b[i]=0;
dfs(i+1,sum,a,b,rw-a[i]);
}
}
}
int main()
{
cin>>n>>m;
int a[n],b[n];
int rw=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
rw+=a[i];
}
memset(b,0,sizeof(b));
dfs(0,0,a,b,rw);
if(cnt==0)
cout<<"No Solution!";
}
子集和问题
于 2022-03-03 15:21:15 首次发布