部分和问题

来源:互联网 发布:淘宝客服认证后解绑 编辑:程序博客网 时间:2024/06/11 20:18


http://acm.nyist.net/JudgeOnline/problem.php?pid=1058

#include<stdio.h>
#include<string.h>
int vis[30],a[30],n,k,sum,ok;
void dfs(int pos,int sum)
{
 int i;
 if(sum>k)
  return;
 if(sum==k)
 {
  ok=1;
  printf("YES\n");
  for(i=0;i<n;i++)
  {
   if(vis[i]==1)
   {
    printf("%d",a[i]);
    break;
   }
  }
  for(i=i+1;i<n;i++)
   if(vis[i]==1)
    printf(" %d",a[i]);
  putchar(10);
  return;
 }
 for(i=pos;i<n;i++)
 {
  if(ok==1)
   return ;
  if(!vis[i])
  {
   vis[i]=1;
   sum+=a[i];
   dfs(i+1,sum);
   sum-=a[i];
   vis[i]=0;
  }
 }
}
int main()
{
 int i;
 while(scanf("%d%d",&n,&k)!=EOF)
 {
  ok=0;
 memset(vis,0,sizeof(vis));
 for(i=0;i<n;i++)
  scanf("%d",&a[i]);
 dfs(0,0);
 if(ok==0)
  printf("NO\n");
 }
 return 0;
}

0 0
原创粉丝点击