hdoj 1258(DFS)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int a[100],n,m,b[100],flag;
void printf(int k)
{
    for(int i=0;i<k;i++)
    {
        printf("%d",b[i]);
        if(i!=k-1)
        printf("+");
    }
    printf("\n");
}
void dfs(int k,int sum,int t)
{

    if(sum>n||k>m)
    return;
    if(sum==n)
    {
        printf(t);
        flag=1;
        return;
    }    
    b[t]=a[k];
    dfs(k+1,sum+a[k],t+1);
    while(k+1<m&&a[k+1]==a[k])//去重,可以控制重复数字的个数。
    {
        k++;
    }
    dfs(k+1,sum,t);
}
int main(int argc, char *argv[])
{
    
    while(cin>>n>>m)
    {
        if(n==0&&m==0)
        break;
        for(int i=0;i<m;i++)
        {
            cin>>a[i];
        }
        memset(b,0,sizeof(b));
        flag=0;
        printf("Sums of %d:\n",n);
        dfs(0,0,0);
        if(!flag)
        printf("NONE\n");
        
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/huluxin/p/9284108.html