Sum It Up -- 深搜 ---较难

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sum It Up -- 深搜 ---较难相关的知识,希望对你有一定的参考价值。

技术分享技术分享

每一行都是一组测试案例   第一个数字 表示总和 第二个数字表示 一共有几个可用数据  现在 按照从小到大的顺序   输出  那些数字中若干数字之和为总和的  信息 /.

很好很明显的  遍历痕迹 , 多看多练

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<vector>
 8 #include<set>
 9 #include<stack>
10 #include<string>
11 #include<sstream>
12 #include<map>
13 #include<cctype>
14 using namespace std;   //  输入的时候  就是 有序的 .
15 int a[1005],flag,n,m,vis[1005],res[1005]={1005};
16 void DFS(int m,int cnt)
17 {
18     int i;
19     if(m==0)    // 攒够了之后
20     {
21         flag=1;
22         for(int j=1;j<cnt-1;j++)
23             printf("%d+",res[j]);
24         printf("%d\n",res[cnt-1]);
25         return ;
26     }
27     for(int i=1;i<=n;i++)
28     {
29         if(!vis[i]&&m-a[i]>=0&&a[i]<=res[cnt-1])  //
30         {
31             vis[i]=1;
32             res[cnt]=a[i];
33             DFS(m-a[i],cnt+1);
34             vis[i]=0;
35             while(a[i]==a[i+1]&&i<=n)
36                 ++i;
37         }
38     }
39 }
40 int main()
41 {
42     while(scanf("%d%d",&m,&n),(n||m))
43     {
44         for(int i=1;i<=n;i++)
45             scanf("%d",&a[i]);
46         flag=0;
47         printf("Sums of %d:\n",m);
48         memset(vis,0,sizeof(vis));
49         DFS(m,1);
50         if(!flag)
51             printf("NONE\n");
52     }
53     return 0;
54 }

 

以上是关于Sum It Up -- 深搜 ---较难的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1258 Sum It Up(DFS)

Sum It Up

B - Sum It Up (数 与 和 )

hdu--1258--Sum It Up(Map水过)

HDU 1258 Sum It Up(dfs 巧妙去重)

HDU-1258 Sum It Up (DFS)