结束了三分搜索的旅程 我开始迈入深搜的大坑。。

首先是一道比较基础的深搜题目(还是很难理解好么)

POJ 1564 SUM IT UP

大体上的思路无非是通过深搜来进行穷举、匹配

为了能更好地理解深搜 可以尝试去画一下二叉树理解一下,查看遍历的路径

代码还是百度到别人的自己再参悟- -佩服别人的功底啊

先上代码:

/*POJ 1546 Sum it up*/
# include<iostream>
# include<algorithm>
# include<cstdio> using namespace std; int a[], b[],t,n,sum,cnt; bool cmp(int a, int b)
{
return a > b;
} void dfs(int posa,int posb,int sum)
{
if (sum > t)
return;
if (sum == t)
{
cnt++; for (int i = ; i < posb; i++)
{
if (i == )
cout << b[i];
else
cout << "+" << b[i];
} cout << endl;
} for (int i = posa; i < n; i++)
{
b[posb] = a[i];
dfs(i + , posb + , sum + a[i]);
while (a[i] == a[i+]&&i+<n)
i++;//防止重复运算(剪枝)
}
} int main()
{
while (cin >> t >> n)
{
if (t==&&n==)
break;
for (int i = ; i < n; i++)
cin >> a[i];
sort(a, a + n, cmp);//为了按照题目要求进行降序输出,先对初始数组降序排序 printf("Sums of %d:\n", t);
cnt = ;
dfs(, , );
if (!cnt)
printf("NONE\n");
} return ;
}

解释一下实现的方法。首先:数组a用来存放输入的一组数字,数组b用来暂时储存本次深搜路径生成的组合

深搜的主体部分不过多解释。。还是自己画树理解最好

一些细节:1.剪枝:在树的同一层一个数字没必要试两遍,所以如果这一层的下一个元素还是和原来一样就跳过它继续

     2.降序:题目要求了降序输出。那么在深搜前直接现对数组a降序排列即可

简单深搜:POJ1546——Sum it up的更多相关文章

  1. POJ 2386 Lake Counting (简单深搜)

    Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...

  2. (深搜)Sum It Up -- poj --1564

    链接: http://poj.org/problem?id=1564 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...

  3. NYoj The partial sum problem(简单深搜+优化)

    题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=927 代码: #include <stdio.h> #include & ...

  4. HDOJ1015(简单深搜)

    Safecracker Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  5. poj 1562 简单深搜

    //搜八个方向即可 #include<stdio.h> #include<string.h> #define N 200 char ma[N][N]; int n,m,vis[ ...

  6. POJ-1321棋盘问题(简单深搜)

    简单搜索step1 POJ-1321 这是第一次博客,题目也很简单,主要是注意格式书写以及常见的快速输入输出和文件输入输出的格式. 递归的时候注意起始是从(-1,-1)开始,然后每次从下一行开始递归. ...

  7. nyoj587 hdu1045 简单深搜

    #include<iostream> #include<cstdio> #include<queue> #include<vector> #includ ...

  8. poj 2386:Lake Counting(简单DFS深搜)

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18201   Accepted: 9192 De ...

  9. USACO 2.3.3 Zero Sum 和为零(深搜枚举)

    Description 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将 ...

随机推荐

  1. SQL Server2005 两台服务器上的数据库互相同步(转载)

    1.1测试环境 Item 发布机 A 订阅机 B OS Windows 2003 Server Windows 2003 Server SQL SQL Server 2005 企业版 SQL Serv ...

  2. PHP 5.3以上版本推荐使用mysqlnd驱动

    什么是mysqlnd?mysqldnd(MySQL native driver)是由PHP源码提供的mysql驱动连接代码.它的目的是代替旧的libmysql驱动. 传统的安装php的方式中,我们在编 ...

  3. REST 和 SOAP、RPC 有何区别?

    第一个问题:什么是RESTful? REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的.有兴趣可以看看这里论文`,谁是Fielding?点击前面名字了解. 那RE ...

  4. vim -d file01 file02 diff file01 file02 对比两文件的不同

    [root@86 vhosts]# vim -d defaul.conf.bak zabbix.xinxianm.com.conf server { | server { listen 80; | l ...

  5. Overflow sort stage buffered data usage of 33554495 bytes exceeds internal limit of 33554432 bytes

    MongoDB执行错误: Overflow sort stage buffered data usage of 33554495 bytes exceeds internal limit of 335 ...

  6. 04、数据绑定控件 ListBox 的一个 Bug

    同事这两天在做 universal 项目的时候,遇到一个诡异的问题,即使设置 Page 为 缓存状态, 在页面跳转后, ListBox 的位置不会被缓存,怀疑是页面的缓存状态出了问题: this.Na ...

  7. hdu1003 最大子串和

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  8. hadoop之mapreduce编程实例(系统日志初步清洗过滤处理)

    刚刚开始接触hadoop的时候,总觉得必须要先安装hadoop集群才能开始学习MR编程,其实并不用这样,当然如果你有条件有机器那最好是自己安装配置一个hadoop集群,这样你会更容易理解其工作原理.我 ...

  9. 【sql绕过】Bypass waf notepad of def

    文章是通过阅读<[独家连载]我的WafBypass之道 (SQL注入篇)>写的阅读笔记. Waf的类型 1.云waf云waf通常是CDN包含的waf,DNS在解析的时候要解析到cdn上面制 ...

  10. catch signal

    捕抓信号 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,称为捕抓信号. 除了SIGSTOP和SIGKILL进程能够忽略或捕获其他的全部信号. 注:信号可从两个不同分类角度对信号进行分 ...