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

Sum It Up---poj1564(dfs)

时间:2015-08-19 09:25:40      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://poj.org/problem?id=1564

给出m个数,求出和为n的组合方式;并按从大到小的顺序输出;

简单的dfs但是看了代码才会;

技术分享
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, flag;
int a[11000], b[11000];
int cmp(int a, int b)
{
    return a>b;
}
void dfs(int pos, int len, int sum)///pos代表位置;
{
    if(sum==n)
    {
        flag=1;
        printf("%d", b[0]);
        for(int i=1; i<len; i++)
            printf("+%d", b[i]);
        printf("\n");
        return ;
    }
    for(int i=pos; i<m; i++)
    {
        if(sum+a[i]<=n)
        {
            b[len]=a[i];
            dfs(i+1, len+1, sum+a[i]);
            while(i+1<m && a[i]==a[i+1])i++;///去重;
        }
    }
}
int main()
{
    while(scanf("%d %d", &n, &m), m+n)
    {
        for(int i=0; i<m; i++)
            scanf("%d", &a[i]);
        sort(a, a+m, cmp);
        flag = 0;
        printf("Sums of %d:\n", n);
        dfs(0, 0, 0);
        if(flag==0)
            printf("NONE\n");
    }
    return 0;
}
View Code

 

Sum It Up---poj1564(dfs)

标签:

原文地址:http://www.cnblogs.com/zhengguiping--9876/p/4741236.html

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