无限回溯比较每一种可能的情况
这题和NYOJ上面的输出不一样 每种情况都输出来了
比如5 10
1 2 3 4 5
输出就是
YES
1 2 3 4
1 4 5
2 3 5
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,k,arr[25],vis[25],ans,flag,flag2;
void dfs(int x)
{
if(ans==k)
{
if(flag2==0)
{
cout<<"YES"<<endl;
flag2=1;}
flag=1;
for(int i=0;i<n;i++)
if(vis[i]==1)
cout<<arr[i]<<" ";
cout<<endl;
return ;
}
else if(ans>k||x>n)
return ;
for(int i=x;i<n;i++)
{
ans=ans+arr[i];
vis[i]=1;
// cout<<"**"<<ans<<endl;
dfs(i+1);
ans=ans-arr[i];
vis[i]=0;
}
}
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>arr[i];
memset(vis,0,sizeof(vis));
flag=0;
flag2=0;
ans=0;
dfs(0);
if(flag==0)
cout<<"NO"<<endl;
return 0;
}