uva 10400(dfs)
来源:互联网 发布:泰和安消防主机编程 编辑:程序博客网 时间:2024/05/28 01:34
题意:一个数字序列和一个目标数字,看否能让这个序列经过+-×/得出目标数字答案。如果可以打印算式。
题解:只dfs会超时,加一个数组存储数字序列中每个数字与下一个数字的运算结果是否已经出现过,减少重复计算。
#include <stdio.h>#include <string.h>#include <math.h>const int N = 105;const int MAX = 65000;int val[N], now[N][MAX], n, tar, flag;char ope[N];void dfs(int cur, int v) {if (fabs(v) > 32000)return;if (cur == n - 1 && v == tar) {flag = 1;return;}if (cur == n - 1)return;if (now[cur][v])return;now[cur][v] = 1;int temp = v + val[cur + 1];ope[cur] = '+';dfs(cur + 1, temp);if (flag)return;temp = v - val[cur + 1];ope[cur] = '-';dfs(cur + 1, temp);if (flag)return;temp = v * val[cur + 1];ope[cur] = '*';dfs(cur + 1, temp);if (flag)return;if (val[cur + 1] && v % val[cur + 1] == 0) {temp = v / val[cur + 1];ope[cur] = '/';dfs(cur + 1, temp);}}int main() {int t;scanf("%d", &t);while (t--) {flag = 0;memset(now, 0, sizeof(now));scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &val[i]);scanf("%d", &tar);dfs(0, val[0]);if (!flag)printf("NO EXPRESSION\n");else {for (int i = 0; i < n - 1; i++)printf("%d%c", val[i], ope[i]);printf("%d=%d\n", val[n - 1], tar);}}return 0;}
0 0
- uva 10400(dfs)
- uva--10400+dfs+回溯
- 【DFS】UVA
- 【DFS】UVA
- UVA - 10400 Game Show Math DFS
- uva 784(dfs)
- dfs uva-297-Quadtrees
- UVA 10318 简单dfs
- uva 11218 KTV(DFS)
- uva 301 Transportation (DFS)
- UVA 185(暴力DFS)
- UVA 11218 - KTV DFS
- uva 1267 - Network(dfs)
- uva 669 - Defragment(dfs)
- uva 10609 - Fractal(dfs)
- uva 784(dfs)
- Oil Deposits uva DFS
- XYZZY uva BFS+DFS
- JVM垃圾回收机制
- ZOJ 3818 Pretty Poem 模拟题
- 输出流的格式控制
- 初识Repeater控件
- ZOJ 3816 Generalized Palindromic Number dfs+暴力枚举
- uva 10400(dfs)
- VS添加Ajax
- Java的servlet生成动态验证码
- 理解python的staticmethod与classmethod实现
- win8.1IIS部署
- 链栈(java实现)
- win8.1网站发布
- Android ORMLite 框架的入门用法
- 项目OA之实体类的设计