#include<iostream>
#include<cstring>
#include<algorithm>
#define MAXN 20+5
using namespace std;
int a[MAXN];
int n,k,flag;
int vis[MAXN];
void print()
{
for(int i=0;i<n;i++)
{
if(vis[i]!=0)
cout<<a[i]<<" ";
}
cout<<endl;
}
void dfs(int s,int i)
{
if(flag==1||i==n+1)
return ;
if(s==0)
{
cout<<"YES"<<endl;
print();
flag=1;
return ;
}
if(s-a[i]>=0)
{
vis[i]=1;
dfs(s-a[i],i+1);
vis[i]=0;
}
dfs(s,i+1);
}
int main()
{
int i;
while(cin>>n>>k)
{
for(i=0;i<n;i++)
cin>>a[i];
memset(vis,0,sizeof(vis));
// sort(a,a+n);
flag=0;
dfs(k,0);
if(flag==0)
cout<<"NO"<<endl;
}
return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
#define MAXN 20+5
using namespace std;
int a[MAXN];
int n,k,flag;
int vis[MAXN];
void print()
{
for(int i=0;i<n;i++)
{
if(vis[i]!=0)
cout<<a[i]<<" ";
}
cout<<endl;
}
void dfs(int s,int i)
{
if(flag==1||i==n+1)
return ;
if(s==0)
{
cout<<"YES"<<endl;
print();
flag=1;
return ;
}
if(s-a[i]>=0)
{
vis[i]=1;
dfs(s-a[i],i+1);
vis[i]=0;
}
dfs(s,i+1);
}
int main()
{
int i;
while(cin>>n>>k)
{
for(i=0;i<n;i++)
cin>>a[i];
memset(vis,0,sizeof(vis));
// sort(a,a+n);
flag=0;
dfs(k,0);
if(flag==0)
cout<<"NO"<<endl;
}
return 0;
}
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
173万+

被折叠的 条评论
为什么被折叠?



