Sum It Up UVA, 574

#include
#include
#include
#include
#include
#include
using namespace std;
int List[15];
vectorit;
vector > it_sum;//还可以这样用,长知识了
int flag=0;
int n;
void DFS(int cur,int t)
{
    if(t==0)
    {
        it_sum.push_back(it);
    }
    else
    {
        for(int i=cur;i             if(i==cur||List[i]!=List[i-1])// 相同的只进行第一个,想想为什么
            {
            it.push_back(List[i]);
            DFS(i+1,t-List[i]);
            it.pop_back();
            }
    }
}
int main()
{
    int t;
    while(scanf("%d%d",&t,&n)!=EOF&&n)
    {
        it_sum.clear();
        it.clear();
        for(int i=0;i             scanf("%d",&List[i]);
        printf("Sums of %d:\n",t);
        if(t==0){printf("\n");continue;}
        else DFS(0,t);
        if(it_sum.size()==0)
         printf("NONE\n");
        else
        {
            for(int i=0;i             {
                  for(int k=0;k                  {
                     if(k>0)
                       printf("+");
                    printf("%d",it_sum[i][k]);
                 }
                 printf("\n");
            }




        }
    }
    return 0;
}

你可能感兴趣的:(ACM)