HDU1258 POJ1564 Sum It Up DFS

来源:互联网 发布:化工软件有哪些 编辑:程序博客网 时间:2024/05/22 12:54

题目大意:输入两个整数t和n,然后输入n个整数,让你找出这n个整数中,和为t所有的算式。

分析:DFS即可,只是我们要找出都需要哪些参数。

首先,我们需要一个纪录当前算式和的参数sum,同时用来作为递归的终止条件;其次,我们还需要一个辅助数组ans来纪录和为t的算式,这就需要一个参数cnt来纪录ans中元素的个数,便于输出;最后,我们还需要一个参数x来纪录当前算式位于原数组num中的位置,用于DFS中遍历。有了这三个参数,问题也差不多就解决了。

实现代码如下:

#include <cstdio>#include <iostream>using namespace std;int n,t;int num[15],ans[15];bool flag;void dfs(int sum,int x,int cnt){    if(sum==t)    {        flag=true;        printf("%d",ans[0]);        for(int i=1;i<cnt;i++)          printf("+%d",ans[i]);        printf("\n");        return ;    }    for(int i=x;i<n;i++)    {        if(i==x||num[i]!=num[i-1])        {            ans[cnt]=num[i];            dfs(sum+num[i],i+1,cnt+1);        }    }    return ;}int main(){    while(scanf("%d%d",&t,&n))    {        if(t==0&&n==0) break;        for(int i=0;i<n;i++)          scanf("%d",&num[i]);        flag=false;        printf("Sums of %d:\n",t);        dfs(0,0,0);        if(!flag) puts("NONE");    }    return 0;}



0 0