zju1711

#include<stdio.h>
int num[12];
int sums[12];
int n,m;
int flog,flag;
void DFS(int i,int sum)
{
  int j;
     if(i>=m)return;
     if(i>0)
     if(num[i]==num[i-1]&&sums[i-1]==0)
     {  
        DFS(i+1,sum);
        return;
     }
     sums[i]=1;
     if(sum+num[i]==n)
     {
        flog=0;j=i;
          for(j=0;j<m;j++)
          {
              if(sums[j]){if(flog)printf("+");printf("%d",num[j]);flog=1;}
          }
          printf("\n");
          flag=1;
     }
     if(sum+num[i]<n)
     {
         DFS(i+1,sum+num[i]);
     }
     sums[i]=0;
     DFS(i+1,sum);
}
void main()
{
    int i;
    while(scanf("%d%d",&n,&m),n!=0&&m!=0)
    {
      flag=0;
         for(i=0;i<m;i++)
         {
               scanf("%d",&num[i]);
         }
         for(i=0;i<12;i++)
              sums[i]=0;
         printf("Sums of %d:\n",n);
         DFS(0,0);
         if(flag==0)printf("NONE\n");
    }
    return 0;
}

posted @ 2013-08-02 10:28  《 》  阅读(197)  评论(0编辑  收藏  举报