码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1258 Sum It Up (dfs)

时间:2015-07-27 00:01:51      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:

 

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a[20];
int ans[20];
int num[200];
struct Mark
{
    int shu,rt;
};
Mark mark[20];
int ok;
int n,t;
int cnt;
int cmp(int x,int y)
{
    return x>y;
}
void dfs(int rt,int i,int j,int sum)
{
       if(sum>t) return ;
       int k,l;
       mark[rt].shu=a[i];
       mark[rt].rt=j;
       //printf("%d...\n",sum);
       if(sum==t)
       {
           ok=1; //printf("%d\n",rt);

           int coun=0;
           /*if(t==5&&rt==3)
           {
               printf("%d %d %d %d\n",rt,i,j,sum);
           }*/
           for(k=1;k<=rt;k++)
           {
              for(l=1;l<=mark[k].rt;l++)
              {
                  ans[coun++]=mark[k].shu;
              }
           }
           for(k=0;k<coun;k++)
           {
               if(k!=0) printf("+");
               printf("%d",ans[k]);
           }
           printf("\n");
           return ;
       }
       if(i<cnt-1)
       {
           for(k=num[a[i+1]];k>=0;k--)
           {
               dfs(rt+1,i+1,k,sum+a[i+1]*k);
           }
       }
}
int main()
{
    int i,j,k;
    int temp;
    //int cnt;
    while(scanf("%d%d",&t,&n)!=EOF)
    {
        if(t==0&&n==0) break;
        ok=0; cnt=0;
        memset(ans,0,sizeof(ans));
        memset(num,0,sizeof(num));
        memset(mark,0,sizeof(mark));

        for(i=0;i<n;i++)
        {
            scanf("%d",&temp);
            if(num[temp]==0)
            {
                a[cnt++]=temp;
            }
            num[temp]++;
        }
        //printf("%d..\n",cnt);
        sort(a,a+cnt,cmp);
        /*for(i=0;i<cnt;i++)
        {
            printf("%d %d..\n",a[i],num[a[i]]);
        }*/
        printf("Sums of %d:\n",t);

            for(i=num[a[0]];i>=0;i--)
            {
                dfs(1,0,i,a[0]*i);
            }

        if(ok==0)
            printf("NONE\n");
    }
    return 0;
}

 

HDU 1258 Sum It Up (dfs)

标签:

原文地址:http://www.cnblogs.com/sola1994/p/4678956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!