题目链接

http://poj.org/problem?id=1950

题意

输入一个整数n(3<=n<=15),将1,2,..n顺序排列,在数字中间插入'+','-','.',这样会产生一个算数表达式,如果表达式的值为0,则输出该表达式。如果表达式为0的个数大于20,则只输出前20个。

思路

采用DFS搜索解决。由于数字的位置是固定的,所以在符号的位置上不断地尝试三种符号即可,若最终的表达式结果为0且是前20个表达式,则输出该表达式。

代码

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5
 6 const int N = 20;
 7 char str[N];
 8 int n;
 9 int nums;
10 int k;
11
12 /*
13  * sum : 已求得的表达式的值
14  * pre : 当前位置pos的前一位置的值
15  * pos : 当前处理的数字,pos-1为符号插入的位置
16 */
17 void dfs(int sum, int pre, int pos)
18 {
19     if(pos==n+1)
20     {
21         if(sum==0)
22         {
23             nums++;
24             if(nums<=20)
25             {
26                 for(int i=1; i<n; i++)
27                     printf("%d %c ",i, str[i]);
28                 printf("%d\n", n);
29             }
30         }
31         return;
32     }
33
34     str[pos-1] = '+';
35     dfs(sum+pos, pos, pos+1);
36
37     str[pos-1] = '-';
38     dfs(sum-pos, -pos, pos+1);
39
40     str[pos-1] = '.';
41     if(pos>=10)     //10.11=1011
42         k = 100;
43     else k = 10;    //1.2=12
44
45     if(pre<0)
46         dfs(sum-pre+pre*k-pos, pre*k-pos, pos+1);
47     else if(pre>0)
48         dfs(sum-pre+pre*k+pos, pre*k+pos, pos+1);
49 }
50
51 int main()
52 {
53     cin>>n;
54     nums = 0;
55     dfs(1, 1, 2);
56     cout<<nums<<endl;
57     return 0;
58 }

转载于:https://www.cnblogs.com/sench/p/7818427.html

poj1950 Dessert(DFS)相关推荐

  1. Dessert(dfs)

    七夕快乐~~~zjr  Dessert Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6397   Accepted: 23 ...

  2. 三十二、图的创建深度优先遍历(DFS)广度优先遍历(BFS)

    一.图的基本介绍 为什么要有图 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图. 图的举例 ...

  3. 【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现

    有关离散傅里叶级数(DFS)我之前也写过一些博文,例如:离散周期信号的傅里叶级数(DFS) 这里我再次给出标准公式. 分析式: 其中: 综合式: 这里我必须先声明,关于分析式和综合式前面那个系数1/N ...

  4. 部署分布式文件系统(DFS)

    部署分布式文件系统(DFS) 使用 DFS 命名空间,可以将位于不同服务器上的共享文件夹组合到一个或多个逻辑结构的命名空间.每个命名空间作为具有一系列子文件夹的单个共享文件夹显示给用户.但是,命名空间 ...

  5. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  6. 广度优先搜索(BFS)与深度优先搜索(DFS)

    一.广度优先搜索(BFS) 1.二叉树代码 # 实现一个二叉树 class TreeNode:def __init__(self, x):self.val = xself.left = Nonesel ...

  7. 7.9模拟赛T1图的遍历(dfs)

    图的遍历(dfs) [题目描述] 对于一个有向图G来说,我们存在一个经典的遍历算法,就是DFS (深度优先搜索遍历).将G以1号点为起点进行DFS后,我们可以 得到G的一棵DFS遍历树T.就此,我们可 ...

  8. 7.6 T1 深度优先搜索(dfs)

    深度优先搜索(dfs) [题目描述] sol:50pts随便写写,就是大众分了,直接n2dpOK,100分要找点规律,需要数学头脑 官方题解 //#include <bits/stdc++.h& ...

  9. 二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)

    二叉树的深度优先遍历(DFS)与广度优先遍历(BFS) 深度优先遍历:从根节点出发,沿着左子树方向进行纵向遍历,直到找到叶子节点为止.然后回溯到前一个节点,进行右子树节点的遍历,直到遍历完所有可达节点 ...

最新文章

  1. 盘点程序员写过的惊天Bug:亏损30亿、致6人死亡,甚至差点毁灭世界
  2. 深度学习激活函数比较
  3. 简单说明PHP的垃圾收集机制是怎样的?
  4. jsp中导入jsf标签库_初学jsf,自制的标签使用时报错?解决办法
  5. 【Git】mac执行git命令出现xcrun: error: invalid active developer path解决方法
  6. 梧州计算机学考查询,学考成绩查询
  7. mvc 在视图中调用别的视图
  8. Redis学习笔记整理(黑马程序员视频课程)
  9. robocode java_IBM Robocode Java学习利器(1)Robocode 入门
  10. java excel 水印_Java下载文件加文字水印(Excel、PDF、图片)
  11. 极光效果通发布重定向app拉活服务,为头部app提升DAU
  12. 在脉脉匿名频道上看了这些公司的评价后,这里有几个结论
  13. 制作一个简单HTML红色喜庆邀请函网页(HTML+CSS)
  14. MySQL数据库鼠标操作
  15. 什么是GMS、CDMA、GPRS、EDGE、WCDMA、TD-CDMA、HSPA+、LTE?
  16. python调用谷歌翻译__201907
  17. c语言入门-5-字符串
  18. FFmpeg音频播放器(8)-创建FFmpeg播放器
  19. 《剑指offer》每日分享三道题- 2 day
  20. 一款挂靠QQ的盗号木马清理记

热门文章

  1. 利用触摸精灵实现截图功能(针对微信)
  2. 黑客与画家 读书笔记
  3. 一次基于u2-net的人物肖像画的实践
  4. Ubuntu18.04+ROS melodic 安装调用 RealSense L515
  5. 数据结构—回溯法、子集树、排列树
  6. idea提交本地项目到oschina
  7. idea下 git无法提交空的文件夹
  8. PS无法打开png和jpg
  9. ZBT的计算几何模板
  10. 结束语-放弃完美主义,执行力就是限时限量认真完成