hdoj 1258(DFS)

Posted huluxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("
");
}
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);
        dfs(0,0,0);
        if(!flag)
        printf("NONE
");
        
    }
    return 0;
}

以上是关于hdoj 1258(DFS)的主要内容,如果未能解决你的问题,请参考以下文章

hdoj 1518 Square dfs

HDOJ 1010 (DFS,剪枝)

HDOJ1045DFS

HDOJ-1015 Safecracker DFS

hdoj 1518(DFS)

HDOJ5877(dfs序+离散化+树状数组)