POJ 1950 Dessert DFS 搜索
题意:输入n(1 <= n <= 15),求由1到n的数经过'+','-'或'.'三种运算后值为0的可能情况数,并输出前20组答案,若不足20组,输出全部。 (10.11=>1011)
#include<iostream>
using namespace std;
const int Max = 16;
int n,num; // num记录可能得情况数。
char symbol[Max];void print(){int i;for(i = 1; i < n; i ++)printf("%d %c ", i, symbol[i]);printf("%d\n", i);
}void dfs(int sum, int depth, int pre){ // dfs尽量少用全局变量,如定义成dfs(int depth)。if(depth == n){ // 深搜出口。if(sum == 0){num ++;if(num <= 20) print();}}else{int next;symbol[depth] = '+'; // 若第depth位符号为'+'。next = depth + 1;dfs(sum + next, depth + 1, next);symbol[depth] = '-'; // 若第depth位符号为'-'。next = depth + 1;dfs(sum - next, depth + 1, next);symbol[depth] = '.'; // 若第depth位符号为'.'。if(depth < 9)next = pre * 10 + depth + 1;elsenext = pre * 100 + depth + 1;int i = depth - 1;while(symbol[i] == '.' && i >= 0) i --;//乘号要先计算 注意优先级 ...9-10.11.12if(symbol[i] == '+')dfs(sum + next - pre, depth + 1, next);else if(symbol[i] == '-')dfs(sum - next + pre, depth + 1, next);}
}
int main(){cin >> n;symbol[0] = '+'; // 将第0个符号看成'+',构造成 0 + 1 ? 2 ? 3 …简化后面较烦的初始化。num = 0;dfs(1, 1, 1);cout << num << endl;return 0;
}
POJ 1950 Dessert DFS 搜索相关推荐
- poj 1950 Dessert(dfs)
*题意: 在1到n之间添加'+','-','.'三种运算符令最后结果为0,输出前20种添加方法,若不足20种则全 输出,最后输出共有多少种添加方式.('.'表示将其两侧的数连成一个数例:1 ...
- poj 1950 Dessert 深搜
题意: 给n,问有多少和由1,2...n,和'+','-','.'(表示连接,4.5表示45)组成,值为0的表达式. 分析: 深搜,因为要枚举到"连接"的情况,所以传送pre表示上 ...
- poj 1950 Dessert(dfs枚举,模拟运算过程)
/* 这个代码运行的时间长主要是因为每次枚举之后都要重新计算一下和的值! 如果要快的话,应该在dfs,也就是枚举的过程中计算出前边的数值(这种方法见第二个代码),直到最后,这样不必每一次枚举都要从头再 ...
- POJ 1950 Dessert
该说终于rand到一道正常画风的搜索题吗... 本题就是简单dfs 不过在"."这个符号的处理上边要想想... 注意深度大于20层是不打印的...之前因为这个OLE了好几次... ...
- POJ - 2386 (dfs简单应用)
POJ - 2386 (dfs深度优先搜索) 题目正文: Due to recent rains, water has pooled in various places in Farmer John' ...
- C语言过河问题主函数,c,c++_C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因?,c,c++,算法 - phpStudy...
C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因? 这是原题目,后面附上我的代码,刚刚接触DFS,不是很熟练,求教育--谢谢!!!TUT 这是题目,我大概概括一下 用'※'和 ...
- hdu 5424(dfs搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5424 官方题解: 如果图是联通的,可以发现如果存在哈密顿路径,一定有一条哈密顿路径的一端是度数最小的点 ...
- sdut 2152:Balloons(第一届山东省省赛原题,DFS搜索)
Balloons Time Limit: 1000MS Memory limit: 65536K 题目描述 Both Saya and Kudo like balloons. One day, the ...
- nyist oj 19 擅长排列的小明(dfs搜索+STL)
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 小明十分聪明.并且十分擅长排列计算.比方给小明一个数字5,他能立马给出1-5按字典序的全排列,假设你想 ...
最新文章
- Linux crontab 命令格式
- linux系统根分区挂载出错 系统无法,用虚拟机安装linux时显示“没有定义根文件系统,请到分区菜单以修正此错误”,是什么意思,肿么弄谢谢各位...
- 大数据薪资一再飙升 学习大数据需要哪些基础?
- [并查集][排序][dfs][启发式合并] JZOJ P3635 Peaks
- java的Random类
- (转载)Hadoop -- Map-Reduce入门
- GooFlow修改元素color(背景/字体/连线)
- sin的傅里叶变换公式_傅里叶变换的由来及复数下的傅里叶变换公式证明
- Outlining and Hiding Code----feature
- android开发塔防游戏机,上手快又耐玩 五款Android平台塔防类游戏推荐
- php里style标签,style标签怎么用?
- Java查看内存使用情况
- pythonend什么意思_Python中的 \t 和 end=” 是什么意思?
- Dev GridView网格中格式化 TimeSpan
- matlab用到两个工具箱有重复函数文件处理方法
- mac小技巧之打印文件
- birthday中文是什么_birthday是什么意思_birthday在线翻译_英语_读音_用法_例句_海词词典...
- switchhosts工具
- Java新手上路--算数运算符
- AI神经网络-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)
热门文章
- 360路由器c301的官方固件和openwrt固件
- 空间发表说说html页面实现原理,空间说说还能这样玩?jquery开发腾讯QQ空间说说发表效果...
- 计蒜客-A1530 Abiyoyo
- 「铭说」恶意软件分析,新版本的Danabot
- 招聘季如何面试软件测试岗位?超全面试题分享
- Word Vector的综述
- uniapp | 打开iOS和Android实现GPS定位权限
- 硬盘知识大全(含主板、BIOS)
- 用Python做了一个 盯盘机器人,股票价格实时监控,还能邮件通知你!
- [庆国庆]来生情缘-温情女儿国