在部分和问题中,可将所有可能全部输出;
(要加强对深搜的理解)
#include<stdio.h>
#include<string.h>
int shu[30];
int cun[30];
int n,sum,flag;
void dfs(int i,int sun,int x)
{
if(sun>sum) return ;
if(sun==sum)
{
int j;
if(flag==0)
printf("YES\n");
flag=1;
for(j=0;j<x-1;j++)
printf("%d ",cun[j]);
printf("%d\n",cun[x-1]);
return ;
}
if(i==n)
return ;
cun[x]=shu[i];
dfs(i+1,sun+shu[i],x+1);
dfs(i+1,sun,x);
}
int main()
{
while(~scanf("%d%d",&n,&sum))
{
memset(shu,0,sizeof(shu));
memset(cun,0,sizeof(cun));
int i;
for(i=0; i<n; i++)
{
scanf("%d",&shu[i]);
}
flag=0;
dfs(0,0,0);
if(flag==0)
printf("NO\n");
}
return 0;
}